我有一个自定义适配器,它根据特定列表项是否“有效”来更改视图的alpha。我还需要在用户尝试单击无效项目时显示Toast。不幸的是,由于视图回收,我目前没有看到如何为每个视图设置不同的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();
}
}
答案 0 :(得分:0)