0
我有一個使用自定義適配器的列表視圖。在列表視圖中唯一的項目是一個TextView(現在)。當我點擊TextView時,背景顏色應該變成藍色,當我再次點擊它時,背景顏色應該變成默認顏色(淺灰色)。我正在嘗試使用ViewHolder模式來實現這一點。ViewHolder模式 - ListView - 項目的背景顏色設置不正確
現在的問題是,當我點擊列表中的第一個項目時,一些隨機項目的背景顏色會變成藍色。
CustomAdapter類:
public class ResultsAdapter extends BaseAdapter {
ViewHolder holder;
@Override
public int getCount() {
return dummyText.length;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = getActivity().getLayoutInflater().inflate(
R.layout.item_mtf_results, parent, false);
holder = new ViewHolder();
holder.txtViewResults = (TextView) convertView
.findViewById(R.id.textview_item_mtf_results);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.txtViewResults.setText(dummyText[position]);
holder.txtViewResults.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.d(Const.DEBUG, "in onClick Method");
Log.d(Const.DEBUG, "Is checked ? = " + holder.isChecked);
String result = holder.txtViewResults.getText().toString();
listener.onResultClick(result);
if (holder.isChecked) {
Log.d(Const.DEBUG, "isChecked = true");
holder.txtViewResults.setBackgroundColor(getResources()
.getColor(R.color.light_grey));
holder.txtViewResults.setTextColor(getResources()
.getColor(R.color.black));
holder.isChecked = false;
Log.d(Const.DEBUG,
"Holder is set to false.. checked ? = "
+ holder.isChecked);
} else {
Log.d(Const.DEBUG, "isChecked = false");
holder.txtViewResults.setBackgroundColor(getResources()
.getColor(R.color.blue));
holder.txtViewResults.setTextColor(getResources()
.getColor(R.color.white));
holder.isChecked = true;
Log.d(Const.DEBUG,
"Holder is set to true.. checked ? = "
+ holder.isChecked);
}
}
});
return convertView;
}
}
ViewHolder類:
public static class ViewHolder {
TextView txtViewResults;
boolean isChecked = false;
}
讓我知道如果你需要任何其他代碼...
您爲什麼需要在支架中檢查?請參閱是否可以將布爾值作爲標記設置爲textview。 – km86