2011-03-21 22 views
0

我有一個自定義對象列表,我將其加載到允許多選的ActivityList中,並在右側顯示覆選框。這些自定義對象包含名爲「enabled」的字段。當我加載數據時,我想要滾動瀏覽對象列表,並選中代表具有啓用字段標記爲true的對象的每一行的複選框。目前我已將所有記錄加載到ActivityList中,但我無法將任何行「檢查」,即使對象被標記爲「已啓用」。使用預先選擇的行加載ActivityList

這是我使用某一行標記的代碼調用setListAdapter後直接檢查

for (int i = 0; i < sourceList.length; i++) { 
    DataSource d = sourceList[i]; 
    view.getChildAt(i).getClass().toString()); 
    CheckedTextView checkView = (CheckedTextView)view.getChildAt(i); 
    checkView.setChecked(Boolean.parseBoolean(d.enabled)); 
} 

我已經把這個代碼,我已經把它放在onContentChanged()函數。但是,在這兩個地方行都沒有顯示,所以view.getChildAt(i)返回null,所以顯然這行不會被檢查。

任何人都可以告訴我在哪裏可以放這個代碼,以便它將在所有行添加並顯示在屏幕上後執行?

謝謝!

最初我沒有自定義適配器我只是使用ArrayAdapter。爲了覆蓋getView()方法,我創建了一個自定義適配器和擴展ArrayAdapter。我仍然允許ArrayAdapter類完成大部分工作,但我重寫了getView()。這裏是我的代碼爲getView()

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    convertView = super.getView(position, convertView, parent); 

    if (convertView.getClass() == CheckedTextView.class){ 
     CheckedTextView checkView = (CheckedTextView)convertView; 
     DataSource d = getItem(position); 
     checkView.setText(d.getName()); 
     checkView.setChecked(Boolean.parseBoolean(d.enabled)); 
    } 

    return convertView; 
} 

即使使用此代碼沒有任何複選框正在檢查。 DataSource的名稱字段被設置爲文本,但setChecked()方法似乎不適合我。我也試過硬編碼,這是

checkView.setChecked(true); 

這對我也不工作。你對我可能做錯什麼有更多的想法嗎?

再次感謝!

回答

0

你能顯示你的適配器代碼嗎?要撥打setChecked的地方位於您的適配器中的getView代碼中。它會是這樣的:

@Override 
getView(int position, View convertView, ViewGroup parent) { 
    if (convertView == null) { 
     convertView = LayoutInflater.from(getContext()).inflate(
      R.layout.my_list_row, parent, false); 
    } 
    CheckedTextView checkView = (CheckedTextView) 
     convertView.findViewById(R.id.check_view); 
    DataSource d = sourceList[i]; 
    checkView.setChecked(Boolean.parseBoolean(d.enabled)); 
    return convertView; 
} 

ListView並沒有通過getChildAt真正暴露其子女。目標接口是通過構建並填充getView中的行。

0

您需要做的是在getView方法中調用myList.setItemChecked(position, Boolean.parseBoolean(d.enabled));(其中myListListView的實例)。

在設置列表適配器之前,請確保您已撥打myList.setChoiceMode(int choiceMode)

如果您有其他視圖中Checkable意見,那麼包含在視圖需要實現Checkable以及用於可檢查的項目列表中的正常工作(見CheckableRelativeLayout例如)