2009-12-11 24 views
0

我正在编写一个应用程序,需要一些帮助来持续存储和加载与某些资源相关的首选项。让我举个例子。Android和存储/加载资源偏好 - 如何实现一致性?

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

那么,如果我还想存储每个微调器的偏好呢?例如,当选择微调值时,我会存储一个密钥“spinner SOMETHING”= SOME_DATA。

问题是 - 这应该是什么SOMETHING是?监听器具有以下特征:

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

的位置和标识也没有什么帮助这里他们相对于每个微调器设置。

但是,在这个例子中,父母本身就是微调者,应该拥有我需要的所有信息。我尝试使用parent.getId()来获取每个微调控件的资源ID并使用一个键“微调ID”存储首选项,但显然这些资源ID会在您向应用程序添加更多资源时发生变化,所以我的设置会重置,因为键改变。

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

谢谢。

回答

2

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

开箱即用的最好的人类可读标识符将是getPrompt,它可以简单地向您显示您设置为spinners提示的任何内容。它应该是一个OK标识符,但如果手动更改提示文本,它当然也很容易破损。

然后,最具破坏性的方法是在每个视图包含的一般容器中指定一个标识符 - tag

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

如果您已经使用了别的标签,该1.6+ API包括指定多个标签,并通过索引来访问它们的能力。如果您需要支持较旧的API版本,则始终可以将标记设置为包含标识符和原始标记的包装器对象。

+0

谢谢 - 我想这正是我所寻找的。 –

+0

请注意,根据Romain Guy的说法,基于索引的标签主要用于可重用的库或系统代码,而不是用于应用程序。 – CommonsWare

+0

感谢您的评论,commonsware。 HTC继续拖延固件更新,所以我还没有开始玩有趣的sdk4的东西,但我自己= / –