android - 维护 fragment 中选定项目的突出显示?

标签 android android-layout android-widget

我有一个包含两个 fragment 的布局。左侧 fragment 是使用 SimpleCursorAdaptor 的 ListFragment,右侧 fragment 填充了有关从左侧 fragment 列表中选择的项目的详细信息。我正在尝试弄清楚如何确保 ListFragment 中的所选项目保持突出显示,直到选择列表中的另一个项目。

经过一些研究,我尝试使用 android:background="@drawable/item_selector" 我可以更改不同状态的颜色,但它们似乎都不会持续存在。我认为 selected 会......在您选择其他项目之前,您选择的项目仍然是所选项目似乎合乎逻辑。

我什至尝试在我的 clickhandler 中使用 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>

我不确定还有哪些其他代码可能有帮助,所以请随时询问您认为必要的任何其他代码。

最佳答案

经过进一步研究,答案在 android 文档中(实际上是文档的两部分)。

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

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

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 或更高版本。

关于android - 维护 fragment 中选定项目的突出显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10023904/

相关文章:

android - 我需要有关 Widget 和 PendingIntents 的帮助

android - 在 android 小部件上获取电池电量

android - androidx.test.annotation 包位于哪个 AndroidX 库中?

android - 在android中访问短信的电话号码

Android 模拟器导致 linux 崩溃并出现错误?

android - 如何使用 RecyclerView 构建水平 ListView

android - 获取当前 Activity 的小部件

android - 我想在 Android 应用程序中跟踪我的当前位置

Android:从全屏返回后,内容高度偏移了一些像素

java - Fragment 未显示且 OnCreateView 方法未调用