android - 使用自定义 ArrayAdapter 在 Android 屏幕旋转时失去颜色的 ListView 中的选定项目

标签 android listview android-fragments

我将自定义 ListFragment 与我的自定义 ArrayAdapter 一起使用。

getView() 中,我根据条件设置了 parentListView.itemChecked(position, true)

public View getView(int position, View convertView, ViewGroup parent) {
...
if (null == mParentListView) {//mParentListView is an instance variable
            mParentListView = (ListView) parent;
        }
if (some condition) {
            mParentListView.setItemChecked(position, true);
}

我也在为 fragment 做 setRetainInstance(true)。因此,只有当它为 null 时,我才会在 fragment 中创建一个新的 arrayadapter 实例。

if (null == mOptionsArrayAdapter) 
mOptionsArrayAdapter = new ModeOptionsArrayAdapter(getActivity(),
                ModeTypeEnum.values(), mSelectedModeEnumId);

}

一切正常。但是,当我旋转屏幕时,所选项目的颜色会丢失。我的意思是 listRow 的 textview colorStateList 中指定的颜色未应用。

只有当我允许在旋转时再次创建适配器(通过删除空检查)时,它才有效。

我想在 OnCreateView() 中重用父 View 。但是在一些 StackOverflow 的回答中不鼓励这样做。

我的行layout.xml

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/textViewModeOptionItem"
    style="@style/TripAppTextViewStyle.Big"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_marginTop="10dp"
    android:singleLine="true"
    android:textColor="@color/trip_mode_options_text_indicator"
    android:textIsSelectable="false" />

每次都创建适配器是唯一的解决方案吗?

我的颜色状态列表 xml - trip_mode_options_text_indicator.xml

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:color="@color/white"/>
<item android:state_pressed="true" android:color="@color/white" />
<item android:state_selected="true" android:color="@color/white"/>
<item android:state_activated="true" android:color="@color/white"/>
<item android:color="@color/gray"/>

</selector>



当我第一次进入 Activity 时,选择/激活的列表行显示白色文本颜色,其余显示灰色(在我的颜色状态列表中指定),但是当我旋转屏幕时,所有行都显示灰色,包括mParentListView.setItemChecked 设置为 true。

最佳答案

对于当前类,您需要在 AndroidManifest.xml 中提供 configChanges 选项,如下所示:

android:configChanges="orientation|keyboardHidden"

关于android - 使用自定义 ArrayAdapter 在 Android 屏幕旋转时失去颜色的 ListView 中的选定项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18915767/

相关文章:

android - 如何以编程方式通过我的应用程序更改 whatsapp 壁纸?

java - 创建空白 Activity 不会生成 R.java

android - Travis CI 显示 Android 平台 28 错误,但在 yml 文件的任何地方都没有提到

android - 如何停止 ListView 回收?

Android - ListView 更改 View 属性

java - 单击任何 ListView 项目时,将该项目文本显示到 EditText 中

android - 从 Fragments 访问主要 Activity FloatingActionButton

Android - 使用 Retrofit 2.3 和 OkHTTP 固定证书

android - 带有抽屉导航的 Android 应用程序的正确结构

android - 请帮助阐明 Android 中设置 Activity 的当前标准