2011-11-08 44 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

相关问题