Android Studio:BaseAdapter 和 ArrayAdapter 在构造函数方面的区别



我在理解如何使用适配器时有些困惑。因此,自定义 ArrayAdapter 类中的构造函数与自定义 BaseAdapter 类中的构造函数略有不同,我不明白这是怎么发生的。所以这是一个自定义的 ArrayAdapter 类构造函数;

private class TaskAdapter extends ArrayAdapter<Task>{
    TaskAdapter(ArrayList<Task> tasks){
        super(TaskListActivity.this, R.layout.task_list_row,R.id.task_item_name, tasks);
    }

这是一个自定义的 BaseAdapter 类构造函数;

private class FieldsAdapter extends BaseAdapter{
ArrayList<String> emails;
ArrayList<String> phoneNumbers;
FieldsAdapter(ArrayList<String> phoneNumbers,ArrayList<String> emails){
this.phoneNumbers = phoneNumbers;
this.emails = emails;
}

为什么 BaseAdapter 类构造函数如此不同?我的意思是,当您将适配器保存到一个单独的对象并使用该对象设置 ListView 适配器时,为什么它不需要知道 TaskAdapter 对象知道的所有特定信息,例如当前上下文、要复制的布局以及要填充该布局的 ArrayList,换句话说, 这TaskListActivity.this, R.layout.task_list_row,R.id.task_item_name, tasks?这对我来说有点令人困惑,适配器的整个目的不再有意义。你能解释一下吗?

主要原因是ArrayAdapterBaseAdapter的子类。BaseAdapter 使您可以更自由地定义传入的数据收集类型。
例如,除了ArrayAdapter,我们还有CursorAdapterSimpleAdapter也是从BaseAdapter扩展而来的。
引用:

  • https://developer.android.com/reference/android/widget/BaseAdapter.html
  • https://developer.android.com/reference/android/widget/ArrayAdapter.html

最新更新