4

我正在看这个ListView教程:

列表视图教程

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

在教程中它定义了一个“ StableArrayAdapter”,这到底是什么意思?如果我使用常规的ArrayAdapter,由于某种原因会很危险吗?

4

4 回答 4

6

前两个答案绝对正确,但只是为了更直接地解决您的问题,以防其他人与您有同样的疑问;常规的 ArrayAdapter 一点也不危险,唯一的“问题”是它可能无法满足您的需求,在这种情况下,您将不得不创建自己的适配器,正如本教程的作者通过在ListViewExampleActivity 类的结尾。

不要被这个名字迷失了,我猜这是因为被覆盖的方法“hasStableIds”总是返回true,这并不意味着常规的ArrayAdapter会产生问题。

于 2013-11-07T17:53:39.340 回答
5

ArrayAdapter:它只是一种向 ListView 提供数据的方式。它也是一个由对象数组支持的 BaseAdapter。

CustomAdapter:如果您的 ListView 是一个普通且简单的 ListView(其中列表中的每个项目都有一个 TextView),那么使用 ArrayAdapter 将是恰当的。但建议您创建自己的 CustomAdapter,它扩展了可用于向 ListView 提供数据的 ArrayAdapter。通过这种方式,您可以轻松扩展您的 ListView 以包含多个 TextView 甚至 ImageView(以显示图像)。

CursorAdapter:当您在游标中有数据时使用游标适配器(通常是当您从数据库中检索数据时。游标必须包含名为“_id”的列,否则此类将不起作用。

于 2013-07-26T05:02:53.060 回答
4

如果您使用的是简单的 ListView,例如每个项目仅一个 TextView,则只需使用标准ArrayAdapter,另一方面,如果您想要列表中的自定义项目,如 ListView 中每个项目内的视图组合,则扩展ArrayAdapter并实现它以满足您的需求。

于 2013-07-26T04:19:14.150 回答
2

StableArrayAdapter 只是 ArrayAdapter 的扩展版本,但在 StableArrayAdapter 中,它们重写了 BaseAdapter 的方法 hasStableIds() 以返回 true。

您可以在以下链接中进行检查:

StableArrayAdapter - 覆盖 hasStableIds 以返回 true

ArrayAdapter - 没有覆盖 hasStableIds 但扩展了 BaseAdapter

BaseAdapter - 有 hasStableIds 但返回 false

现在的问题是 StableIds 有什么用

这表明项目 ID 在基础数据更改时是否稳定。如果为 True 则相同的 id 始终指代相同的对象。了解更多信息

于 2017-01-17T10:51:02.537 回答