Android searchview сохраняет неправильное состояние

В своем фрагменте я сохраняю два простых вида поиска. Если я заполню второе представление поиска, если я оставлю активность (отмеченную как убитую из параметров разработчика) и вернусь снова, Android автоматически восстанавливает запросы просмотра поиска, но у них есть неправильные тексты (второй запрос будет установлен и для первого) . Как я могу заставить Android не сохранять автоматически состояние для моих поисковых просмотров?

configureSearchViews вызывается из onViewCreated

   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>
0
0
82
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я вижу в исходном коде SearchView, что он раздувает текст редактирования внутри. Когда вы помещаете два SearchView, вы помещаете на свой экран в основном два текста редактирования с одинаковым идентификатором.
Поскольку эти редактируемые тексты имеют одинаковые идентификаторы, когда Android восстанавливает свое состояние, он использует второй запрос (потому что Android использует пары идентификаторов и значений для восстановления состояния с помощью SparseArray).
Чтобы исправить это, вы можете в основном использовать onSaveInstanceState для сохранения ваших запросов и onRestoreInstanceState для восстановления после kill kill.

Другие вопросы по теме