0
这里是我的getView()
方法:自定义的ListView重演
public View getView(final int pos, View convertView, ViewGroup parent) {
final ViewHolder holder;
int rowType = getItemViewType(pos);
if (convertView == null) {
switch (rowType) {
case 1:
convertView = mInflater.inflate(
R.layout.single_class_select_row_header, parent, false);
holder = new ViewHolder();
holder.label = (TextView) convertView
.findViewById(R.id.tvSingleClassSelectHeader);
convertView.setTag(holder);
break;
case 2:
final int newPos = getRealPosition(pos);
convertView = mInflater.inflate(
R.layout.single_class_select_row, parent, false);
holder = new ViewHolder();
holder.checkBox = (CheckBox) convertView
.findViewById(R.id.chkSession);
holder.mainLayout = (LinearLayout) convertView
.findViewById(R.id.llSingleClassLayout);
holder.phase = (TextView) convertView.findViewById(R.id.phase);
holder.class_info = (TextView) convertView
.findViewById(R.id.class_info);
holder.phase.setText(getListObject(pos).phase);
holder.class_info.setText(getListObject(pos).info);
convertView.setTag(holder);
holder.checkBox.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// edit out
}
}
});
holder.mainLayout.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// edit out
}
}
});
holder.phase.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// edit out
}
}
});
break;
}
} else {
holder = (ViewHolder) convertView.getTag();
}
return convertView;
}
任何人都可以看到,为什么?我看过其他的例子,但是因为我因为列表中间的标题而忽略了getItemViewType()
,所以没有任何例子符合我的情况,因为我以不同的方式做事。
看来,我应该把setOnClickListner
的的if-block
下方,但我有问题,我holder
变量,而它的其他情况下需要的是final
未初始化。
你需要设置''if'块的外部**'来测试'convertView',否则只有在该视图为空时才会设置数据(并继续仅将该数据作为视图被回收)。 – Luksprog
@Luksprog就是这样。我只是为了让所有'持有者'变量都开心而改变事情。我现在就明白了。你想回收UI视图,而不是数据! (如果你愿意,你可以标记为答案) – KickingLettuce