2012-08-23 43 views
0

我有一個ListView其中每個ListItem都有一個CheckBox它的佈局。當一個CheckBox被激活並滾動出可視區域時,它將被取消激活。據我所知ListView重複使用Views,我必須在我的getView()方法中保存CheckBoxes的狀態,但我在那裏有兩個問題。ListView中的複選框在滾動時取消激活

回答

1

您正試圖在字符串上調用setSelected。您需要在複選框上調用它。變量「list」是一個String的ArrayList。

在這兩種情況下,您都試圖調用字符串類型的複選框方法。你需要在你的複選框上打電話給他們。

**編輯

你需要在getView做的是以下幾點:

  1. 如果convertView不爲空,通過調用相應的它的狀態保存到你的「viewholder」級convertView的子元素的方法。你試圖做到這一點,如果convertView IS爲空,這是錯誤的。
  2. 如果convertView爲null,那麼它不是一個循環視圖,並且沒有任何可以保存的東西。

基本上,你的代碼應該是這樣的:

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    ViewHolder viewHolder = null; 
    if (convertView == null) { 
     LayoutInflater inflator = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflator.inflate(R.layout.listitem, parent, false); 
    } else { 
     //you should change viewHolder to simply store a boolean, rather than the entire checkbox. It should just store whether or not the checkbox was checked. 
     viewHolder = new ViewHolder(); 
     viewHolder.text = (TextView) convertView.findViewById(R.id.listcontent); 
     viewHolder.isChecked = ((CheckBox) convertView.findViewById(R.id.cb)).isChecked(); 
     //do whatever else here 
    } 
    return convertView; 
} 
+0

好吧,我想這是越來越在列表中的位置,然後,如果它的選擇檢查。我現在做了你所建議的改變,但是調用checkBox會拋出錯誤「checkBox無法解析」。 「checkBox.get(爲getPosition).setSelected(buttonView.isChecked());」。它也不適用於前綴viewHolder。 – user1617102

+0

複選框不是一個可訪問的變量,它是ViewHolder類中的成員。 –

+0

你的代碼有問題。當我滾動時,它會隨機激活/取消激活離開可見區域的複選框。 – user1617102

相關問題