Автоматическое расширение searchView в Kotlin - PullRequest
0 голосов
/ 27 мая 2020

У меня есть searchView в моем IndexActivity . При нажатии на searchView запускается новое действие под названием SearchActivity . Снова внутри поисковой активности у меня есть searchView, который расширяется при нажатии. У него есть прослушиватель запросов, который выполняет внешний вызов API.

Однако после того, как я открываю SearchActivity, щелкнув значок searchView, мне нужно снова щелкнуть searchView, чтобы ввести его. Я хочу, чтобы searchView был сфокусирован, как только начинается действие. Это мой код возможности поиска:

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        menuInflater.inflate(R.menu.toolbar_search, menu)
        val searchView: SearchView =
            menu?.findItem(R.id.menu_search)?.actionView as SearchView
        // searchView.setIconifiedByDefault(false)
        // searchView.focusable = View.FOCUSABLE
        // searchView.isIconified = false
        // searchView.requestFocusFromTouch()
        // searchView.onActionViewExpanded()

Прокомментированные строки - это те строки, которые я пробовал искать в Интернете, но, похоже, они не работают.

Это мой код в toolbar_searchbar. xml, который включен в activity_search, установленную SearchActivity:

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.google.android.material.appbar.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <androidx.appcompat.widget.Toolbar
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:titleTextColor="@color/cardview_light_background"
            app:subtitleTextAppearance="@font/alegreya_sans_medium"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:background="@android:color/transparent"
            android:id="@+id/toolbar_searchbar"
            app:popupTheme="@style/AppTheme.PopupOverlay">
        </androidx.appcompat.widget.Toolbar>
    </com.google.android.material.appbar.AppBarLayout>


</androidx.coordinatorlayout.widget.CoordinatorLayout>

Это код toolbar_search. xml, который раздувается, как показано на приведенный выше код:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:title="Search"
        android:id="@+id/menu_search"
        android:icon="@drawable/quantum_ic_search_grey600_24"
        app:showAsAction="always|collapseActionView"
        app:actionViewClass="androidx.appcompat.widget.SearchView"
        />

</menu>

Это то, что я получаю в начале.

This is what I get at the start of activity

Это то, что я хочу начало.

This is what I want

Ответы [ 2 ]

0 голосов
/ 27 мая 2020

Для вас было бы намного проще иметь все в одном действии и иметь только одну панель инструментов. Вам не нужно создавать другое действие только для запуска другого logi c, оно не должно быть привязано к пользовательскому интерфейсу.

Итак, ваше решение - создать фрагмент контейнера (если вам нужно несколько экранов ), добавьте поверх него панель инструментов и все. Переместите logi c в ViewModel и сделайте там все logi c.

Таким подходом вы решите несколько проблем:

  • Вы не будете моргать при смене экрана
  • Работа с клавиатурой (открыта / закрыта)
  • Вы можете проще и правильнее управлять панелью инструментов и фокусом для SearchView
  • Вы не решаете проблему неправильного подхода, а реализуете все лучше
0 голосов
/ 27 мая 2020

Обязательно импортируйте: androidx.appcompat.widget.SearchView

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item android:id="@+id/search_contacts"
        android:title="search"
        android:icon="@android:drawable/ic_menu_search"
        app:showAsAction="always"
        app:actionViewClass="androidx.appcompat.widget.SearchView" >
    </item>
</menu>
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
    menuInflater.inflate(R.menu.search_view, menu)
    val searchView: SearchView =
        menu?.findItem(R.id.search_contacts)?.actionView as SearchView

    searchView.isIconified = false
    return true
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...