我将自定义 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/