我有两个片段的布局。左手片段是使用SimpleCursorAdaptor的ListFragment,右手一个片段填充有关从左片段中的列表中选择的项目的详细信息。我试图找出如何确保ListFragment 中所选项目保持突出显示,直到选中列表中的其他项目为止。
经过一些研究后,我尝试使用android:background="@drawable/item_selector"
我可以改变不同状态的颜色,但它们似乎都没有持续存在。我认为所选择的......在您选择不同的项目之前,所选项目仍然是所选项目似乎是合乎逻辑的。
我甚至尝试在我的点击处理程序中使用v.setSelected(true);
,希望它可以保持状态,但这也不起作用。
是否有一个我失踪的州?我查看了开发文档,似乎没有其他任何合适的内容......
item_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_pressed="true"
android:drawable="@color/green" />
<item
android:state_selected="true"
android:drawable="@color/blue" />
</selector>
我不确定其他代码可能会有什么帮助,所以请随意询问您认为必要的其他代码。
答案 0 :(得分:12)
答案是在进一步研究之后的android文档中(实际上是文档的两个部分)。
首先,在触摸模式下,没有选择或聚焦状态。
其次,默认情况下,列表视图设置为无选择模式(意味着列表中的任何项都不能具有所选状态)。我所要做的就是通过添加以下内容来更改选择模式(可能是单个或多个,我只需要/想要单个):
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
然后我在选择器XML中使用了选择状态(转换为activated
状态):
<item
android:state_activated="true"
android:drawable="@color/blue" />
将其应用于行布局xml文件中作为背景:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="35dp"
android:background="@drawable/item_selector"
android:gravity="center_vertical"/>
我选择的项目现在显示为蓝色背景,直到选择了不同的项目。
请注意,此(android:state_activated)需要Android API 11或更高版本。
答案 1 :(得分:1)
我认为您还需要添加 state_focused ,以使其感觉被选中或突出显示。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_pressed="true"
android:drawable="@color/green" />
<item
android:state_selected="true"
android:drawable="@color/blue" />
<item
android:state_focused="true"
android:drawable="@color/red" />
</selector>
答案 2 :(得分:0)
这对我ListFragment
非常好,但我认为它仅适用于Android 4.0及更高版本。我使用android:background="?android:attr/activatedBackgroundIndicator
为列表项创建了一个简单的布局(如果Android低于4.0,则需要在drawable中停止类似的布局):
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:gravity="center_vertical"
android:background="?android:attr/activatedBackgroundIndicator"
android:orientation="horizontal" >
<TextView
android:id="@+id/list_item_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:singleLine="true"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
android:gravity="center_vertical"
android:layout_margin="@dimen/double_view_margin" />
然后,只需使用此布局创建一个简单的ArrayAdapter
并将选择模式设置为单一:
final ArrayAdapter<String> labelsAdapter = new ArrayAdapter<String>(getActivity(), R.layout.item_simple_list_item, R.id.list_item_text, labels);
setListAdapter(labelsAdapter);
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
之后,您可以使用setItemChecked
方法高亮显示必要的项目:
@Override
public void onListItemClick(final ListView l, final View v, final int position, final long id) {
getListView().setItemChecked(position, true);
}