首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >BaseAdapter和ArrayAdapter有什么不同?

BaseAdapter和ArrayAdapter有什么不同?
EN

Stack Overflow用户
提问于 2013-05-28 23:43:35
回答 4查看 53.6K关注 0票数 101

我想知道使用BaseAdapterArrayAdapter的区别。

我一直在通过ArrayAdapters实现我想要的东西。

它是否会影响实现它的适配器接口上的ListView的性能?

最后一个问题是,我可以使用这些Adapters中的任何一个来实现ListView吗?或者,在某些情况下只能使用特定的适配器?

EN

回答 4

Stack Overflow用户

发布于 2013-05-28 23:57:19

回答你的3个问题:

(1)根据安卓文档,BaseAdapter只是一系列适配器类型的超类,其中之一就是ArrayAdapter。还有许多从BaseAdapter派生的其他适配器,它们适合不同的用途。因此,这两者之间的效率是不一样的;您只需要使用不同的子类来访问一组不同的函数/方法。

(2) ArrayAdapter的效率取决于您在该类中所做的工作的效率,即处理位图和其他数据的效率。

(3)您可能会想出一种方法来使用不同类型的适配器来工作您的ListView,然而,ArrayAdapter工作的原因是因为它通常是有意义的,因为它的目标是构建一个交互式列表。ArrayAdapte接受一个Array,通常是对象的ArrayList,然后对其进行处理,为ListView创建支持信息。从这个意义上讲,ArrayList --> ArrayAdapter --> ListView的设置在逻辑上是有意义的。

票数 9
EN

Stack Overflow用户

发布于 2015-03-10 16:51:15

BaseAdapter和ArrayAdapters之间的另一个区别是,如果扩展数组适配器,则必须在子类构造函数中调用超类构造函数。

代码语言:javascript
复制
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充当所有其他适配器的超类

代码语言:javascript
复制
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;
   }

}
票数 7
EN

Stack Overflow用户

发布于 2014-09-30 21:41:41

代码语言:javascript
复制
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。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16796182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档