2014-03-29 126 views
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; 
} 

讓我知道如果你需要任何其他代碼...

+0

您爲什麼需要在支架中檢查?請參閱是否可以將布爾值作爲標記設置爲textview。 – km86

回答

0

嘗試添加clickListenr文本視圖內converview==null塊。每次滾動列表視圖時都會設置Listners。