我正在遵循关于在 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);
}
我还没有尝试过任何东西
基本上,这是一个构造函数重载。这个概念用于提供使用不同参数初始化的类的各种版本。通过这样做,您可以接受可选参数,或者有时根本不通过最少的调用。
查看此参考资料以详细了解它。
回到你的问题:
你拥有的构造函数
NumbersViewAdapter(@NonNull Context context, ArrayList<NumbersView> arrayList)
不存在于
ArrayAdapter
上。
检查 ArrayAdapter 上可用的公共构造函数此处:
因为,距离您实施最近的承包商如下:
public ArrayAdapter (Context context, int resource, List<T> objects)
在中间的超级调用中,你必须为
resource
再传递一个参数。
因此,您必须以资源为0来调用
super(context, 0, arrayList);
。
尽管您实际上也可以提供任何资源作为布局文件,稍后可用于此适配器项目视图。