2012-04-24 116 views
0

此Android視圖回收事情是相當瘋狂的,我花了整整一天試圖得到一個解決方法。安卓列表複選框

這是我的代碼和沒有工作

public class CustomCursorAdapter extends SimpleCursorAdapter { 

    private Context currentContext; 
    private Cursor mCursor; 
    private boolean[] rows; 

    public CustomCursorAdapter(Context context, int layout, Cursor c, 
      String[] from, int[] to) { 
     super(context, layout, c, from, to); 
     // TODO Auto-generated constructor stub 
     currentContext = context; 
     mCursor = c; 
     populateRows(); 
    } 

    private void populateRows() { 
     rows = new boolean[mCursor.getCount()]; 
     int i = 0; 
     while (mCursor.moveToNext()) { 
      rows[i] = false; 
      i++;    
     } 

    } 

    @Override 
    public View getView(int position, View v, ViewGroup parent) { 
     // convertView.setBackgroundColor(R.drawable.darkred); 
     if (v != null) { 
      //getting checkbox 
      CheckBox cb = (CheckBox) v.findViewById(R.id.name); 

      if(rows[position]){ 
       rows[position] = false; 
      }else{ 
       rows[position] = true; 
      } 
      cb.setChecked(rows[position]); 

     } 

     return super.getView(position, v, parent); 
    } 

} 

任何幫助表示讚賞。

+0

你能更具體,以創建新實例,例如。你想做什麼?什麼不起作用?它怎麼不工作?您提供的信息越多,您獲得的幫助就越多。 – Gophermofur 2012-04-24 15:38:52

+0

即時通訊從數據庫返回光標和複選框的此選中狀態不與任何數據庫列相關,它僅用於顯示給用戶哪些行被選中。後來我將選定的值添加到數據庫中的另一個表,該部分工作,我只是不能使這個選擇框複選框正常工作 – 2012-04-24 17:07:24

回答

0

很多事情錯在這裏:

  • 在getView不改變狀態。我指的是翻轉行[position]。可能會多次調用getView來繪製相同的列表行。作爲一個附註,你可以通過使用a =!a;
  • 將選中的狀態設置爲if on v!= null。如果你回收一個視圖,你仍然需要初始化它的UI,因爲它可能被設置爲不同數據行的狀態。
  • 如果視圖不爲空,而你重用,返回它
  • 如果視圖爲空,則需要通過虛報佈局
+0

好的,謝謝我明白你的觀點。那麼我應該在onListItemClick方法的列表活動中更改狀態?這不會工作 – 2012-04-24 16:51:14

+0

非常感謝我解決了它,但堆棧溢出不會讓我發佈我的答案,所以... – 2012-04-24 20:02:13