我正在按照一本书的例子来学习Android,并参与了这段代码:
public class DynamicDemo extends ListActivity {
TextView selection;
private static final String[] items={"lorem", "ipsum", "dolor",
"sit", "amet"}
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
setListAdapter(new IconicAdapter());
selection=(TextView)findViewById(R.id.selection);
}
public void onListItemClick(ListView parent, View v,
int position, long id) {
selection.setText(items[position]);
}
class IconicAdapter extends ArrayAdapter<String> {
IconicAdapter() {
super(DynamicDemo.this, R.layout.row, R.id.label, items);
}
public View getView(int position, View convertView,
ViewGroup parent) {
View row=super.getView(position, convertView, parent);
ImageView icon=(ImageView)row.findViewById(R.id.icon);
if (items[position].length()>4) {
icon.setImageResource(R.drawable.delete);
}
else {
icon.setImageResource(R.drawable.ok);
}
return(row);
}
}
}
我实际上理解代码除了在构造函数中为什么这么说:
super(DynamicDemo.this, R.layout.row, R.id.label, items);
这是令我困惑的唯一部分
谢谢!
[R
答案 0 :(得分:3)
答案 1 :(得分:1)
那里有很多事情发生。
首先,这是super
调用,因此调用ArrayAdapter
的构造函数。它正在调用此构造函数:http://developer.android.com/reference/android/widget/ArrayAdapter.html#ArrayAdapter(android.content.Context, int, int, T[])
第一个参数是使用this
实际获取DynamicDemo类的当前实例。这是因为DynamicDemo扩展了ListActivitty,它扩展了Activity,最终扩展了Context,你需要的对象类型。
接下来的两个参数是它要求的资源ID。
最后一个参数是填充适配器所需的数组。
答案 2 :(得分:0)
您正在将自定义布局传递给ArrayAdapter R.layout.row,它具有图像字段。
在渲染时,您再次询问超级视图(自定义视图)并根据您的要求修改图像。
我相信,您可以直接在GetView中创建视图,而无需使用基础构造函数
如果将IconicAdapter分隔在单独的类中,则必须在实例化类时传递项目列表
答案 3 :(得分:0)
super(DynamicDemo.this, R.layout.row, R.id.label, items);
@Param DynamicDemo.this : context
@param R.layout.row : list item layout reference
@param R.id.label : id of textView for which you want to setText string at position i from String-Array (items)
@param items : arrays list containing strings you want to show in list