Android searchview保存错误的状态

Android searchview保存错误的状态,android,android-fragments,android-search,Android,Android Fragments,Android Search,在我的片段中,我保存了两个简单的搜索视图。如果我将填充第二个搜索视图,如果我将离开活动(标记为从开发选项中删除)并再次返回,android将自动恢复搜索视图查询,但它们有错误的文本(第二个查询也将设置为第一个)。我如何才能强制android不为我的SearchView自动保存状态 从onViewCreated调用ConfigureSearchView private fun configureSearchViews() { ibFirstView.show() svFirs

在我的片段中,我保存了两个简单的搜索视图。如果我将填充第二个搜索视图,如果我将离开活动(标记为从开发选项中删除)并再次返回,android将自动恢复搜索视图查询,但它们有错误的文本(第二个查询也将设置为第一个)。我如何才能强制android不为我的SearchView自动保存状态

从onViewCreated调用ConfigureSearchView

   private fun configureSearchViews() {
    ibFirstView.show()
    svFirstField.queryHint = getString(R.string.enter_stop)
    svFirstField.inputType = InputType.TYPE_CLASS_TEXT
    setFirstFieldQueryTextListener()
    svFirstField.setOnQueryTextFocusChangeListener(this)

    svSecondField.queryHint = getString(R.string.enter_number)
    svSecondField.inputType = InputType.TYPE_CLASS_NUMBER
    setSecondFieldQueryTextListener()
    svSecondField.setOnQueryTextFocusChangeListener(this)
}
这是我的xml文件:

  <LinearLayout
            android:id="@+id/llFirsField"
            android:layout_width="match_parent"
            android:layout_height="@dimen/view_loc_selector_height"
            android:background="@drawable/view_rounded_white_bg"
            android:layoutAnimation="@null"
            android:padding="0dp"
            android:stateListAnimator="@null">

            <SearchView
                android:id="@+id/svFirstField"
                android:layout_width="0dp"
                android:layout_height="@dimen/view_loc_selector_height"
                android:layout_gravity="center_vertical"
                android:layout_weight="1"
                android:backgroundTint="@android:color/white"
                android:clickable="true"
                android:fontFamily="@font/montserrat_medium"
                android:iconifiedByDefault="false"
                android:queryBackground="@android:color/transparent"
                android:queryHint="@string/enter_bus_stop"
                android:textColor="@color/colorTextDarkGray"
                android:textSize="@dimen/text_size_search" />

            <ImageButton
                android:id="@+id/ibFirstView"
                android:layout_width="40dp"
                android:layout_height="@dimen/view_loc_selector_height"
                android:layout_gravity="center_vertical"
                android:background="@null"
                android:src="@drawable/ic_pin" />
        </LinearLayout>


        <View
            android:id="@+id/vDividerSelector"
            android:layout_width="match_parent"
            android:layout_height="4dp"
            android:layout_below="@+id/llFirsField" />

        <LinearLayout
            android:id="@+id/llSecondField"
            android:layout_width="match_parent"
            android:layout_height="@dimen/view_loc_selector_height"
            android:layout_below="@+id/vDividerSelector"
            android:background="@drawable/view_rounded_white_bg"
            android:layoutAnimation="@null"
            android:padding="0dp"
            android:stateListAnimator="@null">

            <SearchView
                android:id="@+id/svSecondField"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_gravity="center_vertical"
                android:layout_weight="1"
                android:backgroundTint="@android:color/white"
                android:clickable="true"
                android:fontFamily="@font/montserrat_medium"
                android:iconifiedByDefault="false"
                android:inputType="number"
                android:queryBackground="@android:color/transparent"
                android:queryHint="@string/enter_buss_number"
                android:textColor="@color/colorTextDarkGray"
                android:textSize="@dimen/text_size_search"
                />
        </LinearLayout>

我在
SearchView
的源代码中看到,它正在膨胀内部的编辑文本。当您放置两个SearchView时,基本上是将两个具有相同id的编辑文本放置到屏幕上。
由于这些编辑文本具有相同的id,当android恢复其状态时,它使用第二个文本的查询(因为android使用id值对使用SparseArray恢复状态)。
要解决此问题,您基本上可以使用
onSaveInstanceState
保存查询,并使用
onRestoreInstanceState
从activity kill还原