我正在看这个ListView
教程:
我想知道创建自己的ArrayAdapter
会有多好,而不仅仅是使用和ArrayAdapter
。
在教程中它定义了一个“StableArrayAdapter
”,这究竟意味着什么?如果我使用常规ArrayAdapter
,是否因为某些原因会有危险?
答案 0 :(得分:6)
之前的两个答案是完全正确的,但只是为了更直接地解决您的问题,以防其他人有与您相同的疑问;一个常规的ArrayAdapter根本没有危险,唯一的“问题”是它可能无法满足你的需求,在这种情况下你将不得不创建自己的适配器,因为教程的作者通过创建他所谓的StableArrayAdapter来实现ListViewExampleActivity class的结尾。
不要迷失名称,我猜这是因为覆盖的方法“hasStableIds”总是返回true,这并不意味着常规的ArrayAdapter会产生问题。
答案 1 :(得分:5)
ArrayAdapter:它只是一种向ListView提供数据的方法。它也是一个由对象数组支持的BaseAdapter。
CustomAdapter:如果您的ListView是一个普通且简单的ListView(其中您在列表中每个项目都有一个TextView),那么使用ArrayAdapter将是合适的。 但是建议您创建自己的CustomAdapter,它扩展了一个ArrayAdapter,可用于向ListView提供数据。这样,您可以轻松扩展ListView以包含更多的TextView甚至ImageView(以显示图像)。
CursorAdapter:在光标中有数据时使用光标适配器(通常在从数据库中检索数据时。光标必须包含名为“_id”的列,否则此类将不起作用
答案 2 :(得分:4)
如果您使用的是简单的ListView,就像每个项目只使用TextView一样,那么只需使用标准ArrayAdapter
,如果您想要列表中的自定义项目,就像在视图组合中一样在ListView中的每个项目中,然后扩展ArrayAdapter
并根据您的需要实现它。
答案 3 :(得分:2)
StableArrayAdapter只是ArrayAdapter的扩展版本,但在StableArrayAdapter中,它们重写了BaseAdapter的方法hasStableIds()以返回true。
您可以在以下链接中查看:
StableArrayAdapter - Override hasStableIds to return true
ArrayAdapter - Has not Override hasStableIds but extended BaseAdapter
BaseAdapter - Has hasStableIds but returning false
这表示项目ID在对基础数据的更改中是否稳定。如果为True,则相同的id始终引用同一个对象。 for more info