哇,在列表项目选择方面,文档很糟糕。我只需要能够选择并突出显示列表中的多个项目。我已经浏览了网页并看到了对android:choiceMode="multipleChoice"
的引用,我猜这可以让你选择多个项目。但是我在哪里可以获取我的活动中的所选项目?为什么当我尝试使用setSelection(position)
选择多个项目时,先前突出显示的项目会消失?
Google还在View.setActivated(boolean)
中介绍了
请注意,激活与选择不同。选择是一个瞬态属性,表示用户当前正在与之交互的视图(层次结构)。激活是一种较长期的状态,用户可以将视图移入和移出。例如,在启用了单个或多个选择的列表视图中,将激活当前选择集中的视图。 (嗯,是的,我们对这里的术语深感抱歉。)
所以我应该使用激活而不是选择? This SO answer谈到“激活”只是“检查”的后HoneyComb版本。但是,如果您应该使用“激活”进行多项选择,那么首先要点android:choiceMode="multipleChoice"
?
答案 0 :(得分:13)
所以显然我被引出了错误的轨道,因为我本来应该寻找突出显示“已检查”的项目,而不是“选中”的项目。因此,许多答案告诉我使用selector
使用我的ListView布局使用android:listSelector="@drawable/myselector
,但我真正需要的是使用selector
和我的行布局。解决方案实际上相当简单,我将在下面发布:
<强>抽拉/ rowbackgroundselector.xml 强>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_activated="true"
android:drawable="@android:color/holo_green_light"/>
</selector>
<强>抽拉/ mylistrow.xml 强>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:background="@drawable/rowbackgroundselector"
android:padding="10sp"
/>
<强> MainActivity.onListItemClick()强>
public void onListItemClick(ListView l, View v, int position, long id) {
getListView().setItemChecked(pos, true);
}
最后,请确保您的适配器使用自定义行布局
mAdapter = new ArrayAdapter<FileTag>(this.getActivity(),
R.layout.mylistrow, mList);