我将自定义 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
设置为真。