为什么此示例中的自定义 ArrayAdapter 构造函数与超类构造函数不完全匹配?

问题描述 投票:0回答:1

我正在遵循关于在 Android 中为 ListView 创建自定义 ArrayAdapter 的 tutorial 。这是教程中的自定义适配器类:

public class NumbersViewAdapter extends ArrayAdapter<NumbersView> { 
  
    // invoke the suitable constructor of the ArrayAdapter class 
    public NumbersViewAdapter(@NonNull Context context, ArrayList<NumbersView> arrayList) { 
        
          // pass the context and arrayList for the super  
          // constructor of the ArrayAdapter class 
        super(context, 0, arrayList); 
    } 

如何传入的参数不必与超类中的构造函数匹配?更清楚地说,我认为这个论点是这样的:

NumbersViewAdapter(@NonNull Context context, ArrayList<NumbersView> arrayList)
必须匹配:
super(context, 0, arrayList)

其次,我看到没有构造函数像这样传入参数

(@NonNull Context context, ArrayList<NumbersView> arrayList)
。我认为唯一与它接近的是

public ContactListAdapter(@NonNull Context context, int resource, @NonNull ContactInfo[] objects) {
        super(context, resource, objects);
    }

我还没有尝试过任何东西

java android inheritance android-arrayadapter
1个回答
0
投票

基本上,这是一个构造函数重载。这个概念用于提供使用不同参数初始化的类的各种版本。通过这样做,您可以接受可选参数,或者有时根本不通过最少的调用。

查看此参考资料以详细了解它。


回到你的问题:

你拥有的构造函数

NumbersViewAdapter(@NonNull Context context, ArrayList<NumbersView> arrayList)

不存在于

ArrayAdapter
上。

检查 ArrayAdapter 上可用的公共构造函数此处

因为,距离您实施最近的承包商如下:

public ArrayAdapter (Context context, int resource, List<T> objects)

在中间的超级调用中,你必须为

resource
再传递一个参数。

因此,您必须以资源为0来调用

super(context, 0, arrayList);

尽管您实际上也可以提供任何资源作为布局文件,稍后可用于此适配器项目视图。

© www.soinside.com 2019 - 2024. All rights reserved.