Chi*_*oni 99 performance android listview android-arrayadapter baseadapter
我想知道使用BaseAdapter和之间的区别ArrayAdapter.
我一直在实现我想要的东西ArrayAdapters.
它是否会影响ListView实现它的适配器接口的性能?
而且,最后一个问题是,我能否实现ListView使用其中任何一项所做的任何事情Adapters,或者,在某些情况下,只能使用特定的适配器?
Tan*_*.7x 110
这是区别:
BaseAdapter是一个非常通用的适配器,可以让你做任何你想做的事情.但是,您必须自己编写更多代码以使其正常工作.ArrayAdapter是一个更完整的实现,适用于数组或ArrayLists中的数据.同样,CursorAdapter如果您的数据位于a中,则应使用相关内容Cursor.这两个都延伸了BaseAdapter.如果您的数据位于某种特定的集合中,或者如果您不想要提供的默认行为,ArrayAdapter则可能需要扩展BaseAdapter以获得所需的灵活性.
每个人的表现实际上取决于你如何实施或改变他们的行为.在它们的核心,任何一个都可以同样有效(特别是考虑到a ArrayAdapter 是 a BaseAdapter).
你可以用任何适配器做任何你想做的事情,但请记住这BaseAdapter是抽象的,所以你不能直接使用它.
Bla*_*elt 20
BaseAdapterArrayAdapter扩展时是抽象的BaseAdapter(它是a的具体实现BaseAdapter).如果您延伸,ArrayAdapter则继承所有 ArrayAdapter功能,并覆盖其实现,您可以修改ArrayAdapter行为.如果扩展 BaseAdapter,则必须实现ArrayAdapter已实现的所有Abstract方法.
此外,它是否会影响ListView的性能
不,不是的.
而且,最后一个问题是,我可以使用任何这些适配器实现与ListView的任何操作,或者,在某些情况下,只能使用特定的适配器吗?
如果SDK中的实现满足您的需求,为什么需要覆盖它并重新发明轮子?
它们之间的主要区别是BaseAdapter 不能被实例化,同时ArrayAdapter能
回答你的3个问题:
(1)根据Android文档,BaseAdapter只是许多适配器类型的超类,其中一个是ArrayAdapter.有许多其他适配器来自BaseAdapter适合不同目的的适配器.因此,两者之间的效率有任何不同; 您只需使用各种子类访问不同的函数/方法集.
(2)你ArrayAdapter的效率取决于你在该课程中所做的工作的效率,即位图和其他数据的处理.
(3)您可能想出一种方法来ListView使用不同类型的适配器,但是,原因之所以ArrayAdapter有用,是因为它的目标通常是构建交互式列表.在ArrayAdapte接受一个Array,通常是一个ArrayList对象,它然后处理以产生用于所述背衬的信息ListView.从这个意义上讲,ArrayList- > ArrayAdapter- >的设置ListView在逻辑上是有道理的.
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;
}
}
Run Code Online (Sandbox Code Playgroud)
但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;
}
}
Run Code Online (Sandbox Code Playgroud)
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);
Run Code Online (Sandbox Code Playgroud)
这里我们不能像ArrayAdapter一样使用BaseAdapter.
| 归档时间: |
|
| 查看次数: |
50010 次 |
| 最近记录: |