0
我有一個自定義適配器,它根據特定列表項是否「有效」來更改視圖的alpha值。我還需要在用戶嘗試點擊無效項目時顯示敬酒。不幸的是,由於查看回收,我目前不知道如何爲每個視圖設置不同的OnClickListener。最終,OnClickListener將應用於列表中的每個項目,是否有效。如何在自定義適配器的getView()中設置視圖的OnClickListener而不被回收
解決這個問題的「hacky」方法是在super.getView()中傳入參數爲null的參數。如果可能的話,我寧願避免這樣的事情。
我將不勝感激任何建議,謝謝!
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();
}
}