我想知道使用BaseAdapter
和ArrayAdapter
的区别。
我一直在通过ArrayAdapters
实现我想要的东西。
它是否会影响实现它的适配器接口上的ListView
的性能?
最后一个问题是,我可以使用这些Adapters
中的任何一个来实现ListView
吗?或者,在某些情况下只能使用特定的适配器?
发布于 2013-05-28 23:57:19
回答你的3个问题:
(1)根据安卓文档,BaseAdapter只是一系列适配器类型的超类,其中之一就是ArrayAdapter
。还有许多从BaseAdapter
派生的其他适配器,它们适合不同的用途。因此,这两者之间的效率是不一样的;您只需要使用不同的子类来访问一组不同的函数/方法。
(2) ArrayAdapter
的效率取决于您在该类中所做的工作的效率,即处理位图和其他数据的效率。
(3)您可能会想出一种方法来使用不同类型的适配器来工作您的ListView
,然而,ArrayAdapter
工作的原因是因为它通常是有意义的,因为它的目标是构建一个交互式列表。ArrayAdapte
接受一个Array
,通常是对象的ArrayList
,然后对其进行处理,为ListView
创建支持信息。从这个意义上讲,ArrayList
--> ArrayAdapter
--> ListView
的设置在逻辑上是有意义的。
发布于 2015-03-10 16:51:15
BaseAdapter和ArrayAdapters之间的另一个区别是,如果扩展数组适配器,则必须在子类构造函数中调用超类构造函数。
UserListAdapter extends ArrayAdapter<String>{
List<String> UserList;
Context context;
public UserListAdapter(Context context, int resource,List<String> listUsers) {
super(context, resource, listUsers); /* Super class constructor is called */
UserList = listUsers;
this.context = context;
}
}
但是BaseAdapter没有超类。因为BaseAdapter充当所有其他适配器的超类
UserListAdapter extends BaseAdapter{
List<String> UserList;
Context context;
public UserListAdapter(Context context, int resource,List<String> listUsers) {
/* No super class constructor */
UserList = listUsers;
this.context = context;
}
}
发布于 2014-09-30 21:41:41
private static final String[] COUNTRIES = new String[]{
"Afghanistan", "Angola", "Australia", "Bangladesh", "Belgium",
"Bhutan", "Brazil", "Canada", "China", "Denmark"
};
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line, COUNTRIES);
AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.countries_list);
textView.setAdapter(adapter);
在这里,我们不能像ArrayAdapter那样使用BaseAdapter。
https://stackoverflow.com/questions/16796182
复制相似问题