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