【发布时间】:2014-02-10 11:52:56
【问题描述】:
我有一个自定义适配器,它根据特定列表项是否“有效”来更改视图的 alpha。当用户尝试单击无效项目时,我还需要显示祝酒词。不幸的是,由于视图回收,我目前看不到如何为每个视图设置不同的 OnClickListener。最终 OnClickListener 将应用于列表中的每个项目,无论是否有效。
解决这个问题的“hacky”方法是在 super.getView() 中将 null 作为 convertView 参数传递。如果可能的话,我真的更愿意避免这样的事情。
如果有任何建议,我将不胜感激,谢谢!
public class TestAdapter extends ArrayAdapter<TestModel> {
class ViewHolder {
CheckedTextView ctv;
public ViewHolder(View v) {
ctv = (CheckedTextView)v.findViewById(android.R.id.text1);
}
}
public TestAdapter(Context context, List<TestModel> testModelList) {
super(context, R.layout.test_list_item, testModelList);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);
ViewHolder holder = (ViewHolder)v.getTag();
if (holder == null) {
holder = new ViewHolder(v);
v.setTag(holder);
}
// Decrease alpha to indicate that the item is invalid.
holder.ctv.setAlpha(isEnabled(position) ? 1.0f : 0.2f);
if (!isEnabled(position)) {
holder.ctv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Show a toast which indicates you tried to select an invalid option.
// However, due to view recycling this will eventually apply to
// all views in the list.
}
});
}
return v;
}
@Override
public boolean isEnabled(int position) {
return getItem(position).isValid();
}
}
【问题讨论】:
标签: android listview onclicklistener recycle