2012-12-22 30 views
0

我已經實現了具有兩行(名稱和編號)的自定義列表視圖,並且它是可檢查的。 列表視圖有多個選擇選項。實現自定義的可檢查列表視圖+動態適配器

無論何時用戶搜索名稱,光標都會返回新的項目列表。一旦適配器被新光標項改變,我無法跟蹤之前選擇的項目。

例如,用戶搜索名稱「Jo」它返回10個項目,其中我選擇了2行。一旦我刪除了搜索,光標和適配器就會被更改。我無法標記檢查的項目。我想重寫基於位置的默認可選項目(必須編寫自己的必須使項目可以基於_id(聯繫人ID)檢查) (我嘗試覆蓋onFinishInflate方法,但它沒有幫助)。

任何幫助表示讚賞。 在此先感謝。

+0

「一旦適配器被新光標項改變,我無法跟蹤之前選擇的項目。」當然,你可以......只需鍵入你的列表視圖的源代碼。 – logray

回答

3

你需要的是讓你的複選框數據保持你的適配器和列表視圖的對象。布爾數組的hashmap應該就足夠了。

private HashMap<String, boolean[]> contactMap; 

我想像你可以在一些數據庫的方法或東西加載這一點,你可以有這個人的名字,像「喬」,作爲標識符如果需要的話。數組索引將對應每個列表視圖行中的複選框。然後在你的適配器,我想像是一個CursorAdapter,你可以有以下幾點:

private boolean[] contactObj; 

public void setContactObj(boolean[] contactObj) { 
    this.contactObj = contactObj; 
    notifyDataSetChanged(); 
} 

public boolean[] getContactObj() { 
    return contactObj; 
} 

@Override 
public void bindView(View view, Context context, Cursor c) { 
    final int position = c.getPosition(); 
    final CheckBox cb = (CheckBox) view.findViewById(R.id.checkbox); 

    cb.setChecked(contactObj[position]); 
    cb.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      if (cb.isChecked()) { 
       contactObj[position] = true; 
      } else { 
       contactObj[position] = false ; 
      } 
     } 
    }); 
} 

基本上,你有一個只有一個boolean[]這是能夠在你的列表視圖調整複選框能力的適配器,在複選框被點擊時修改爲布爾型[],然後在您仍然需要它的情況下返回它。

+0

感謝芒果。 我解決了上述問題。現在我面臨另一個問題。 看到下面的鏈接 http://stackoverflow.com/questions/14000837/checkable-displaying-wrong-items-selected-used-simplecursor-custom-layout – swastican

+0

我有問題在維護可檢查的項目,當適配器獲取改變。 (有些方法我創建了自定義適配器,它應該根據我的自定義ID [_contact_id]跟蹤項目項目)。 檢查的項目被維護,但它一直維持其位置。因此,只要沒有listitems被更改,適配器/可檢查仍然保持跟蹤選定的id基於其位置。所以它是選擇錯誤的項目 看到上面的評論和鏈接。 – swastican

相關問題