我正在研究Android应用程序,其中我使用适配器来填充listview中的数据。我很困惑我们应该使用BaseAdapter
。我读了很多问题,我们应该使用ArrayAdapter
表示数组和arraylist,如果是游标,可以使用CursorAdapter
。
我知道BaseAdapter
是ArrayAdapter
和CursorAdapter
的超类。我已经检查了这个问题What is the difference between ArrayAdapter , BaseAdapter and ListAdapter,但它没有解释我们应该何时使用BaseAdapter
。
我应该何时使用BaseAdapter
?
答案 0 :(得分:5)
您应该使用它:
如果您的模型数据尚未存在于具有具体ListAdapter
类的数据结构中,并且
如果您确定创建自定义适配器对用户来说会更好,或者对您的开发工作可能比重新组织数据结构更少
例如,假设您使用JSONArray
来解析JSON片段。 JSONArray
未实现List
界面,因此您无法将其与ArrayAdapter
一起使用。其他适配器都不匹配。但是,您希望在JSONArray
中显示此AdapterView
。在这种情况下,您的选择是:
滚动数据并将其转换为ArrayList
,以便您可以使用ArrayAdapter
或
创建BaseAdapter
的自定义子类,可以调整JSONArray
(a JSONArrayAdapter
)
停止使用JSONArray
,而是使用其他内容来解析您的JSON,例如Gson,它可以直接填充List
,允许您使用ArrayAdapter
答案 1 :(得分:3)
如果您的数据在Collection
中可用,则可以使用ArrayAdapter
。 (使用addAll
方法将数据放入适配器中)
如果您的数据不在Collection
:那么您不能,您必须找到另一个适合您需求的适配器。 (通常:当数据来自数据库时使用CursorAdapter
)
如果找不到任何适用于您的数据结构/数据源的现有适配器:您可以编写BaseAdapter
的子类来支持您自己的数据结构。
如果您打算在ListView
中显示数据(这是一个常见的用例):那么您必须确保您的adpter也实现ListAdapter
(因为ListView
needs a ListAdapter
)
请注意ArrayAdapter
和CursorAdapter
实现了ListAdapter
。