2011-12-14 87 views
0

我有一个ListView(技术上它是一个ListFragment,但我不认为这改变了这个问题),它显示其结果使用SimpleCursorAdapterListView切换选择模式

adapter = new SimpleCursorAdapter(
      getActivity(), 
      R.layout.item, 
      null, 
      new String[] {"Name"}, 
      new int[] {R.id.Name} 
      ); 

    setListAdapter(adapter); 

(该光标在onStart设置/交换)。

我想让用户能够切换选择模式(这将被用于只显示选中的项目)。有点像SMS应用程序,当你把消息放入“批处理模式”时,它允许你选择多个会话,这些会话可以被删除,保存等等。我是否设置了一个新的适配器或者只是改变现有的属性?无论如何,ListView将需要重新绘制以反映变化。

回答

0

这是一个令人惊讶的简单答案。问题是我在拨打onCreate前的方法,onCreateView已经使List膨胀。愚蠢的是,这只是为了测试这个功能。有一次,我把它移到onStart后来进入其预定位置,在FragmentActivity以下工作得很好:

public void toggleAdapter() 
{   
    ListView listView = getListView(); 

    if (listView.getChoiceMode() == ListView.CHOICE_MODE_MULTIPLE) 
    { 
     listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 

     adapter = new SimpleCursorAdapter(
       getActivity(), 
       R.layout.item, 
       dashboardCursor, 
       new String[] {"Name"}, 
       new int[] {R.id.Name} 
       ); 
    } 
    else 
    { 
     listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 

     adapter = new SimpleCursorAdapter(
       getActivity(), 
       R.layout.dashboard_list_item_multiple_choice, 
       dashboardCursor, 
       new String[] {"Name"}, 
       new int[] {R.id.Name} 
       ); 
    } 


    listView.setAdapter(adapter); 
} 
1

你必须做两件事。

  1. 使用ListView的setChoiceMode方法在ListView上启用MULTI_SELECT。

  2. 创建'Selector'来定义'selected'或'checked'状态,并将其设置为您的R.layout.item上的一个样式元素。

1

像维克拉姆Bodicherla答案。

  1. setChoiceMode在ListView上启用MULTI_SELECT。
  2. 设置您的自定义项目布局背景,显示像选中状态:

    android:background="?android:attr/activatedBackgroundIndicator" 
    
+0

仅适用于API 11和更高 – Michal 2013-10-29 13:43:22