我有一个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
无论如何都需要重新绘制来反映变化。
答案 0 :(得分:1)
你必须做两件事。
使用ListView的setChoiceMode方法在ListView上启用MULTI_SELECT。
创建一个'Selector'来定义'selected'或'checked'状态,并将其设置为R.layout.item上的样式元素。
答案 1 :(得分:1)
像Vikram Bodicherla一样回答。
setChoiceMode
在ListView上启用MULTI_SELECT。在自定义项目布局中设置一个显示所选状态的背景,如:
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);
}