android开发分享BaseAdapter和ArrayAdapter有什么区别?

我想知道使用BaseAdapterArrayAdapter之间的区别。

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

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

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

    以下是区别:

    如果您的数据是某种特定的集合,或者您不希望ArrayAdapter提供的默认行为,那么您可能需要扩展BaseAdapter以获得所需的灵活性。

    每个人的performance确实取决于你如何实施他们或改变他们的行为。 在他们的核心,任何一个可以一样有效(特别是考虑到ArrayAdapter 一个BaseAdapter )。

    你可以用任何适配器来做任何你想做的事情,但是请记住, BaseAdapter是抽象的,所以你不能直接使用它。

    BaseAdapter是抽象的,而ArrayAdapter扩展了BaseAdapter (它是一个BaseAdapter的具体实现)。 如果你扩展了ArrayAdapter你可以插入所有ArrayAdapter的特性,并且覆盖它的实现,你可以修改ArrayAdapter beahviour。 如果扩展BaseAdapter ,则必须实现ArrayAdapter已经实现的所有Abstract方法。

    此外,它是否影响ListView的性能

    不,不是的。

    而且,最后一个问题是,我可以通过使用任何这些适配器来实现对ListView的任何操作,或者在某些情况下只能使用特定的适配器?

    如果在SDK中的实现满足您的需求,为什么你需要覆盖它并重新发明轮子?

    它们之间的主要区别在于BaseAdapter不能在ArrayAdapter可以安装的情况下安装

    回答你的3个问题:

    (1)根据Android文档, BaseAdapter只是一些适配器types的超类,其中之一是ArrayAdapter 。 还有一些从BaseAdapter派生的其他适配器适合不同的用途。 因此,这两者之间效率上的差异是不明智的。 你只需要使用不同的子类访问一组不同的函数/方法。

    (2)你的ArrayAdapter的效率取决于你在这个类中做什么的效率,即处理位图和其他数据。

    (3)你可能会想出一种方法来使用不同types的适配器来处理你的ListView ,然而, ArrayAdapter工作原因是因为它的目标是build立一个交互式列表。 ArrayAdapte接受一个Array (通常是一个ArrayList对象),然后处理它以创buildListView的支持信息。 从这个意义上说, 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; } } 

    但是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; } } 

    BaseAdapter更加简单和可定制。 ArrayAdapter实现了ListAdapter的最常用的ListAdapter ,但有时它们还不够。

    但是,几乎所有的东西都可以通过使用ArrayAdapter来实现。 如果您的列表已经通过正确使用ArrayAdapter工作,那么您无法从BaseAdapter中获得任何信息。

    但是,如果您在ArrayAdapter实现中存储ContextArraysLists ,则可能需要切换到BaseAdapter ,因为ArrayAdapter已经实现了它们。

    无论如何,如果你这样做,你总是可以删除这些项目,并诉诸使用getItem()获取数组项, getCount()获取数组的大小和getContext()来膨胀你的意见。

     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。

      以上就是android开发分享BaseAdapter和ArrayAdapter有什么区别?相关内容,想了解更多android开发(异常处理)及android游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/addevelopment/516547.html

      (0)
      上一篇 2020年12月3日
      下一篇 2020年12月3日

      精彩推荐