2013-01-06 70 views
0

我有一個自定義列表視圖項目佈局在左邊有一個複選框和4個文本很像astrid任務管理器。 enter image description here更新複選框上的列表項內容點擊

我打算做的是點擊複選框後,textviews必須更新它們的值。起初,我的問題是檢查位置1上的複選框會在滾動時檢查最後或其他地方的複選框。在尋找解決方案的同時,我開始瞭解如何在listview中回收視圖。我現在應用了諸如viewholder和right這樣的概念,我能夠保持複選框的狀態。但是,點擊複選框後,我會更改文字瀏覽並且更改不會持續,這意味着任何隨機電視也會顯示相同的更改。

我已經在我的適配器中應用了onclicklistener複選框。任何想法如何實現它?

回答

0

您需要在項目數據中保留項目的狀態,而不是視圖持有者。視圖持有人只是一個方便的視圖,在不同的時間將顯示許多不同的項目,假設你回收視圖。在數據綁定過程中,您需要綁定顯示項目所需的所有狀態,以避免隨機數據出現在另一個列表項視圖中。

public class MyListAdapter extends BaseAdapter { 

    // .... 

    @Override 
    View getView(final int position, View convertView, ViewGroup parent) { 
     View view = convertView; 
     if (view == null) { 
      view = inflate(R.layout.my_list_item_layout, parent, false); 

      // View holder just prevents having to look up these values 
      // every time the view is reused. 
      MyViewHolder holder = new MyViewHolder(); 
      holder.checkbox = (CheckBox) view.findViewById(R.id.check_box); 
      holder.textview = (TextView) view.findViewById(R.id.text_view); 
      view.setTag(holder); 
     } 

     final MyViewHolder holder = (MyViewHolder) view.getTag(); 
     final MyData data = (MyData) getItem(position); 
     holder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       data.savedCheckboxState = isChecked; 
       // now tell the view to rebind the data 
       notifyDataSetChanged(); 
      } 
     }); 

     holder.checkbox.setChecked(data.savedCheckboxState); 
     holder.textview.setText(String.valueOf(data.savedCheckboxState)); 
     return view; 
    } 

    private static class MyViewHolder { 
     CheckBox checkbox; 
     TextView textview; 
    } 
} 
0

你可以參考我在這裏完整的代碼,你可以做的是,在布爾數組保存複選框狀態,那麼你不會遇到這個問題.....

Android checkbox multiselected issue

相關問題