维持片段中选定项目的突出显示?

我有两个片段的布局。 左边的片段是使用SimpleCursorAdaptor的ListFragment,右边的片段填充了左边片段中列表中select的项目的细节。 我想弄清楚如何确保从ListFragment选定的项目保持突出显示,直到列表中的另一个项目被选中。

经过一番研究,我试图使用android:background="@drawable/item_selector"我可以改变不同状态的颜色,但是没有一个看起来持续下去。 我认为选定的会…只是看起来合乎逻辑,你select的项目仍然是选定的项目,直到你select一个不同的项目。

我甚至尝试使用v.setSelected(true); 在我的clickhandler希望它可以维持国家,但也没有工作。

有我缺less的状态吗? 我查看了开发文档,没有其他东西似乎是合适的…

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> 

我不确定其他代码可能会有什么帮助,所以请随时索要任何您认为有必要的内容。

Solutions Collecting From Web of "维持片段中选定项目的突出显示?"

答案是在进一步的研究(文档的两个部分真的)之后的android文档中。

首先,在触摸模式下没有select或聚焦的状态。

其次,默认情况下,列表视图被设置为none的select模式(意味着列表中没有项目可以具有select的状态)。 我所要做的只是改变select模式(可以是单个或多个,我只需要/想要单个)join这个:

 getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); 

然后我在select器XML中使用select状态(转换为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"/> 

现在,我select的项目将以蓝色背景显示,直到select不同的项目。

请注意,这(android:state_activated)需要Android API 11或更高版本。

我相信你也需要添加state_focused来使它感觉像select或突出显示。

 <?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> 

这在ListFragment对我来说非常好,但我认为它只适用于Android 4.0及更高版本。 我使用android:background="?android:attr/activatedBackgroundIndicator创build了一个简单的布局(在Android 4.0以下的情况下,您需要在drawables中使用类似的布局):

 <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" /> 

然后,只需使用此布局创build一个简单的ArrayAdapter并将select模式设置为单个:

 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方法setItemChecked必要的项目:

 @Override public void onListItemClick(final ListView l, final View v, final int position, final long id) { getListView().setItemChecked(position, true); }