2016-04-25 84 views
0

我的問題是,當我檢查Checkbox它轉向檢查,但它複製檢查狀態爲下一個ListView項目不在可見列表中(例如,當我可以看到位置0-5/6在一個屏幕上它是元件上的位置7-8)...ListView複選框簽發後

這是我的onClick方法:

viewHolder.messageSelectBox.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (viewHolder.messageSelectBox.isChecked()) { 
        Log.i("itemID", String.valueOf(getItemId(position))); 
        Log.i("position", String.valueOf(position)); 
        mListOfItemsToDelete.add(position); 
        Collections.sort(mListOfItemsToDelete); 
        Collections.reverse(mListOfItemsToDelete); 
       } else { 
        for (int i = 0; i < mListOfItemsToDelete.size(); i++) { 
         int pos = mListOfItemsToDelete.get(i); 
         if (pos == position) { 
          mListOfItemsToDelete.remove(i); 
         } 
        } 
       } 
      } 
     }); 

setOnClickListener是在ListView的適配器getView() ...

getView()實現方法具d:

final ViewHolder viewHolder; 

     if (convertView == null) { 
      LayoutInflater inflater = (LayoutInflater) context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

      convertView = inflater.inflate(R.layout.messages_list_view_single, parent, false); 
     } 

     viewHolder = new ViewHolder(convertView); 

     viewHolder.messageSelectBox = (CheckBox) convertView.findViewById(R.id.messageSelectBox); 

所以,大家好,你知道什麼是錯的嗎?

回答

1

getView()您必須加載檢查狀態如下setOnClickListener之前。

viewHolder.messageSelectBox.setChecked(mListOfItemsToDelete.contains(position)) 

這樣的選中狀態將在mListOfItemsToDelete維護和使用你們會被載入選中狀態的複選框的狀態。

+0

完美的作品!我已經開始從教程創建一個新的ListView ...感謝您的幫助:) – y07k2

1

這是列表視圖中非常常見的問題。出現此問題是因爲列表項在您滾動列表視圖時被重用。所以你需要處理每一次。

因爲您需要在模型類中使用布爾值。並在複選框被選中時將Boolean的值設置爲true/false。