ListView切换选择模式

时间:2011-12-14 10:05:29

标签: android listview simplecursoradapter

我有一个ListView(技术上是一个ListFragment,但我认为不会改变问题),显示其结果为SimpleCursorAdapter

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

    setListAdapter(adapter);

(Cursor在onStart中设置/交换。)

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

3 个答案:

答案 0 :(得分:1)

你必须做两件事。

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

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

答案 1 :(得分:1)

像Vikram Bodicherla一样回答。

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

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

答案 2 :(得分: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);
}