通常,适配器将使用它来优化listview的性能:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
System.out.println("getView " + position + " " + convertView);
ViewHolder holder = null;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.item1, null);
holder = new ViewHolder();
holder.textView = (TextView)convertView.findViewById(R.id.text);
convertView.setTag(holder);
} else {
holder = (ViewHolder)convertView.getTag();
}
holder.textView.setText(mData.get(position));
return convertView;
}
Run Code Online (Sandbox Code Playgroud)
和查看持有人是:
public static class ViewHolder {
public TextView textView;
}
Run Code Online (Sandbox Code Playgroud)
但是如果我有不同类型的行,例如1带有ImabeView,1带有CheckBox,1带有EditText
第一件事是:
@Override
public int getViewTypeCount() {
return 3;
}
@Override
public int getItemViewType(int position) {
//if something
return 0
//if something else
return 1
//if something different
return 2
}
Run Code Online (Sandbox Code Playgroud)
并在getView();
getView(int position, View convertView, ViewGroup parent){
//if convetView == null, getItemViewType(position) and depending on the type inflate respective layout
convertView.setTag(holder);
//else
holder = (ViewHolder)convertView.getTag();
}
Run Code Online (Sandbox Code Playgroud)
但是ViewHolders怎么样,我应该有3个不同的ViewHolders并且根据类型........ setTag为各自的持有人?
我可以找到这样的例子.实际上我还没有看到使用超过1个ViewHolder的anu ListView.
我这样做是对的吗?
谢谢
没有什么从所有申报所有可能的意见停止你ListView在一个单一的布局ViewHolder类(所以ViewHolder将举行一个参考ImageView,CheckBox而EditText从你的例子).
在该getView方法中,当convertView是null你,就设置意见ViewHolder为该类型行只,在所有其他观点的引用ViewHolder会null.什么时候使用视图来ViewHolder看看你工作的哪种类型的行只能ViewHolder从属于那一行的视图中获取视图.
您还可ViewHolder以为每种类型的行使用三个类(并在为它们充气时为每个特定行设置它们),但我认为第一个版本更好.最后,只要正确实现多行类型机制,您就可以采用任何一种方式.
| 归档时间: |
|
| 查看次数: |
6244 次 |
| 最近记录: |