当前位置: 首页 > 知识库问答 >
问题:

在Android中,自定义ArrayAdapter在屏幕旋转时会丢失颜色的ListView中的选定项

索令
2023-03-14

我正在将自定义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为null时,我才在片段中创建arrayadapter的新实例

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

}

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

只有当我允许在循环时(通过移除空检查)再次创建适配器时,它才起作用。

我想到在onCreateView()中重用父视图。但在某些StackOverflow答案中不鼓励这样做。

我的行布局.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的行。

共有1个答案

茅桐
2023-03-14

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

android:configChanges="orientation|keyboardHidden"
 类似资料:
  • 出于某种原因,我的旋转器中选定项的文本颜色为白色。以下是活动的代码: 下面是simple_spinner_item的XML: 下拉项显示为红色,但不显示所选项。我试图将XML中的textColor更改为selector:并创建了这个选择器: 但是所选项目的文本颜色仍然是白色。所以我尝试在OnItemSelectedListener中这样做: 还是白色的... 为什么会发生这种情况,我如何修复它?谢

  • 在自定义arrayAdapter中实现自定义getFilter时遇到问题。实际上,我不知道如何实现它。尝试了各种代码,但仍然没有成功。这是我的自定义阵列适配器。 这是ListTO课程。 这是布局图。 这里的搜索关键字来自“inputSearch”编辑文本。 这是文本更改的侦听器。 谢谢

  • 但似乎什么都没起作用。

  • 不管怎样,关于我的问题:有人愿意编写一个非常、非常、非常、通用、直接和简单的自定义ArrayAdapter,该ArrayAdapter需要两个字符串值,可以与ListView一起使用吗?…或者,尝试调试我的尝试,希望找到我的问题所在。 任何帮助都很感激,谢谢。 我已经包括了我知道需要的代码,但我一直在与其他所有东西罢工。 错误:(20,9)错误:没有为ArrayAdapter找到合适的构造函数(上

  • 编辑:选定项目的蓝色文本。