0

我正在编写一个应用程序,需要一些帮助来一致地存储和加载与某些资源相关的首选项。让我举个例子吧。

假设我有 10 个微调器。它们都具有相同的功能,但含义不同。因为它们具有相同的功能,所以我可以将它们绑定到相同的onItemSelectedListener,然后它将处理选定的值。

好吧,如果我还想存储每个微调器的首选项怎么办?For example, when a spinner value is selected, I'd store a key "spinner SOMETHING " = SOME_DATA.

问题是 - 这应该是什么?侦听器具有以下签名:

public void onItemSelected(AdapterView parent, View v, int position, long id)

position 和 id 在这里没有帮助,因为它们是相对于每个微调器设置的。

但是,在这种情况下是微调器本身的父级应该拥有我需要的所有信息。我尝试使用 parent.getId() 获取每个微调器的资源 ID,并使用键“微调器 ID”存储首选项,但显然这些资源 ID 在您向应用程序中添加更多资源时会发生变化,因此我的设置将被重置,因为键改变。

我应该在这里做什么?我似乎找不到某种简单的 parent.getName() 函数来返回每个微调器的一致名称。

谢谢你。

4

1 回答 1

2

getId是我所知道的唯一对视图有唯一引用的东西,但正如你所说,在你的应用程序的下一个版本中,视图可能没有相同的 ID。

开箱即用的最佳人类可读标识符是getPrompt,它只会向您显示您设置为微调器提示的任何内容。它应该是一个 OK 标识符,但如果您手动更改提示文本,它当然也容易损坏。

因此,最安全的方法是在tag每个 View 包含的通用容器中指定一个标识符。

String myIdentifier = (String) parent.getTag();

如果您已经将标签用于其他用途,则 1.6+ API 包括指定多个标签并通过 index.html 访问它们的能力。如果您需要支持较旧的 API 版本,您始终可以将标签设置为包含标识符和原始标签的包装器对象。

于 2009-12-11T09:24:13.577 回答