我正在为ListView编写我自己的适配器,但我遇到了一些概念问题。首先,这是我写的:谁在ArrayAdapter中调用getView()?
public class MyArrayAdapter extends ArrayAdapter<String> {
private final Context context;
private final int parent;
private final String[] values;
public MyArrayAdapter(Context context, int resourceid, String[] values) {
super(context, -1, values);
this.context = context;
this.parent = resourceid;
this.values = values;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.rowlayout, parent, false);
TextView textView = (TextView) rowView.findViewById(R.id.label);
ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);
textView.setText("abcde lorem ipsum");
String s = values[position];
imageView.setImageResource(R.drawable.no);
return rowView;
}
}
正如你们所看到的,我加了RESOURCEID作为构造函数的参数,因为this page告诉我,它必须采取3个参数。但是,在this article的3.3示例中,当它写入自定义适配器时,它使用构造函数的2个参数。但是如果我不通过R.layout.rowlayout
作为参数在构造函数中,getView如何知道谁是ViewGroup parent
?我的意思是,必须调用getView,并且父对象必须传递给它。但是班级如何知道谁是家长?
另外,Android的页面指示我这样称呼它:
MyArrayAdapter<String> adapter = new MyArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, myStringArray);
但我最终不得不采取<String>
,并搁置这样的:
MyArrayAdapter adapter = new MyArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, myStringArray);
为什么?
是否因为文章扩展了课程而未使用<String>
?就像这样:
public class MyArrayAdapter extends ArrayAdapter<String> {
而且,由于我重写类,为什么我需要调用使用super
原来的构造?