0

我将自定义 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);
}

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

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

}

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

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

我想过在OnCreateView(). 但是在某些 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>



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

4

2 回答 2

1

我在这个问题背后的想法是获得解决方案,以防止在屏幕旋转时创建我的自定义列表适配器。由于我的 listAdapter 引用是一个实例变量,它在屏幕旋转时保留(由于 fragment.setRetainInstance(true))。尽管如此,列表项选择消失了。因此,由于这不起作用,唯一的出路是每次在 onActivityCreated() 以及 fragment.setRetainInstance(true) 中创建列表适配器。

于 2013-09-28T08:26:32.403 回答
1

对于当前课程,您需要提供以下configChanges选项AndroidManifest.xml

android:configChanges="orientation|keyboardHidden"
于 2013-09-20T12:10:40.180 回答