2011-11-08 63 views
2

我有一個ListView,我試圖使用一個可檢查的項目列表。我在ArrayAdaptor中的列表項類上調用toggle()方法,但複選框未在UI中打勾。但是,我可以確認在UI中選擇了正確的項目,並且「isChecked()」狀態正確報告 - 只是UI根本不會改變。我需要調用哪些特殊方法來更新用戶界面的複選框圖形?複選框不會更改UI中的檢查狀態?

換句話說 - 如何以編程方式告訴UI複選框應顯示爲「已選中」?看起來這應該是一個非常簡單的過程,但是我一直在尋找這些信息時遇到了很多麻煩。

代碼如下:

對於在ArrayAdaptor項目數據類:

public class SelectedItemData extends CheckedTextView { 

     public String _item_name; 
     public String getItemName() 
     { 
      return _item_name; 
     } 
     public void setItemName(String in_name) 
     { 
      _item_name = in_name; 
     } 

     // methods 

     public SelectedItemData(Context context) { 
      super(context); 
      init(); 
     } 

     public void init() 
     { 
      this._item_name = "UNSET"; 
      this.setChecked(false); 
     } 

     @Override 
     public String toString() 
     { 
      return _item_name; 
     } 
    } 

在活動類(位於onCreate方法內):

_selectedItemsListView = (ListView) findViewById(R.id.selected_items_listview); 
_selectedItemsListView.setItemsCanFocus(false); 
_selectedItemsListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
_selectedItemsListView.setOnItemClickListener(new OnItemClickListener() { 
@Override 
    public void onItemClick(AdapterView<?> listview, View view, int position, long id) { 
     @SuppressWarnings("unchecked") 
     ArrayAdapter<SelectedItemData> itemsAdapter = (ArrayAdapter<SelectedItemData>)_selectedItemsListView.getAdapter(); 
     SelectedItemData selectedItem = itemsAdapter.getItem(position); 
     selectedItem.toggle(); 
     Toast.makeText(view.getContext(), "Item " + selectedItem.getItemName() + " Selected!", Toast.LENGTH_SHORT).show(); 
     Log.d(TAG, "Is Item Checked? " + selectedItem.isChecked()); 
     _selectedItemsListView.setAdapter(itemsAdapter); 
     } 
}); 

任何指導關於如何使用戶界面能夠正確顯示其中一個項目已被選中/檢查會很好。謝謝!

+0

注意:我*是*在其他地方設置適配器,我不認爲代碼是相關的?所有的項目都正確填充在列表中 - 我的問題是關於如何讓複選框顯示它已被檢查。 – DashRantic

回答

1

您必須用新項目更新適配器並將其設置爲列表視圖。 (itemsAdapter.setItem(item,position))

+0

我在其他地方設置適配器 - 我的問題是關於如何檢查已經放入適配器的項目。 – DashRantic

相關問題