维护片段中所选项目的突出显示?

Bar*_*rak 9 android android-widget android-layout

我有两个片段的布局.左手片段是使用SimpleCursorAdaptor的ListFragment,右手一个片段填充有关从左片段中的列表中选择的项目的详细信息.我正在试图弄清楚如何确保ListFragment中的选定项目保持突出显示,直到选中列表中的另一个项目.

经过一些研究,我尝试使用android:background="@drawable/item_selector"我可以改变不同状态的颜色,但似乎没有一个持续存在.我认为所选择的......在你选择不同的项目之前,所选项目仍然是所选项目似乎是合乎逻辑的.

我甚至尝试v.setSelected(true);在我的clickhandler中使用希望它可以保持状态,但这也不起作用.

有一个我失踪的州吗?我浏览了开发文档,似乎没有其他任何东西......

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>
Run Code Online (Sandbox Code Playgroud)

我不确定其他代码可能会有什么帮助,所以请随意询问您认为必要的其他内容.

Bar*_*rak 12

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

首先,在触摸模式下,没有选择或聚焦状态.

其次,默认情况下,列表视图设置为无选择模式(意味着列表中的任何项都不能具有所选状态).我所要做的就是通过添加以下内容来更改选择模式(可能是单个或多个,我只需要/想要单个):

getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
Run Code Online (Sandbox Code Playgroud)

然后我在选择器XML中使用了选择状态(转换为activated状态):

<item 
 android:state_activated="true" 
 android:drawable="@color/blue" />
Run Code Online (Sandbox Code Playgroud)

将其应用于行布局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"/>
Run Code Online (Sandbox Code Playgroud)

我选择的项目现在显示为蓝色背景,直到选择了不同的项目.

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

  • android:state_activated至少需要API级别11 (2认同)