稳定的ArrayAdapter与ArrayAdapter

4
我正在查阅这个“ListView”教程:ListView Tutorial。我想知道是否自己创建ArrayAdapter比直接使用ArrayAdapter更好。
在教程中,它定义了一个“StableArrayAdapter”,这是什么意思?如果我使用普通的ArrayAdapter,会有危险吗?
4个回答

6
两个之前的答案都是正确的,但为了更直接地回答你的问题,并且以防别人有与你相同的疑惑; 一个常规的ArrayAdapter并不危险,唯一的“问题”是它可能无法满足您的需求,在这种情况下,您将不得不创建自己的适配器,就像教程的作者最后创建了他所谓的StableArrayAdapter在ListViewExampleActivity类的末尾。
不要被名称迷惑,我猜这个名字来自于重写的方法“hasStableIds”始终返回true,这并不意味着常规的ArrayAdapter会引起问题。

5

ArrayAdapter:它仅仅是提供数据给ListView的一种方法。它也是一个被对象数组支持的BaseAdapter。

CustomAdapter:如果你的ListView只是一个普通简单的ListView(其中每个列表项只有一个TextView),那么使用ArrayAdapter是合适的。但是建议你创建自己的CustomAdapter,它继承了ArrayAdapter,可以用来提供数据给你的ListView。这样你就可以轻松地扩展你的ListView,包括多个TextView甚至ImageView(显示图像)。

CursorAdapter:当你有一个Cursor中的数据时(通常是从数据库检索数据时),可以使用CursorAdapter。Cursor必须包含一个名为“_id”的列,否则该类将无法工作。


4

如果你使用的是简单的ListView,例如每个项目仅有一个TextView,那么只需使用标准的ArrayAdapter即可。另一方面,如果你想在列表中使用自定义项,例如在ListView中的每个项目中组合多个视图,则需要扩展ArrayAdapter并根据需要实现它。


2
StableArrayAdapter只是ArrayAdapter的扩展版本,但在StableArrayAdapter中,他们重写了BaseAdapter的hasStableIds()方法来返回true。
您可以在以下链接中检查:
StableArrayAdapter - 覆盖hasStableIds以返回true ArrayAdapter - 没有覆盖hasStableIds但扩展了BaseAdapter BaseAdapter - 具有hasStableIds但返回false 现在问题是稳定Id的用途是什么。
这表示项目 ID 是否稳定,即使底层数据发生更改。如果为 True,则相同的 ID 始终指向相同的对象。了解更多信息

您可以在此链接获取有关stableIds的更多信息:https://dev59.com/ymMl5IYBdhLWcg3wqIhh - Pawanpreet Singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接