StableArrayAdapter与ArrayAdapter

时间:2013-07-26 04:10:05

标签: android listview

我正在看这个ListView教程:

ListView Tutorial

我想知道创建自己的ArrayAdapter会有多好,而不仅仅是使用和ArrayAdapter

在教程中它定义了一个“StableArrayAdapter”,这究竟意味着什么?如果我使用常规ArrayAdapter,是否因为某些原因会有危险?

4 个答案:

答案 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

现在问题是什么是StableIds

的用途

这表示项目ID在对基础数据的更改中是否稳定。如果为True,则相同的id始终引用同一个对象。 for more info