Android Jetpack 导航组件 - 后退按钮关闭搜索视图,而不是导航到上一个屏幕

问题描述 投票:0回答:1

我正在使用 Android Jetpack 导航组件在片段之间来回导航。在一个片段上,我有一个扩展形式的 SearchView。当我按下后退按钮(SearchView 的左侧)时,会发生以下情况:

  1. SearchView 将首先关闭而不是导航到上一个屏幕
  2. 我需要第二次按后退按钮才能导航到上一个屏幕

为什么?为什么它不直接导航到上一个屏幕?

在这里,可以看到片段中处理SearchView相关代码的代码:

override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {

        // add a search view to the menu
        inflater.inflate(R.menu.search_menu, menu)
        val searchItem = menu.findItem(R.id.search)
        searchView = searchItem.actionView as SearchView

        searchItem.expandActionView()

        searchView.apply {
            queryHint = "Search"
            isIconified = false

            /* this shows the query the user has typed (no submission) so that the user can see which search query was used */
            setQuery(args.query, false)

            doOnLayout {
                this.clearFocus()
            }

            setOnQueryTextListener(object : SearchView.OnQueryTextListener{
                override fun onQueryTextSubmit(query: String): Boolean {
                    
                    // do some stuff with the query ..
                    return false
                }
                override fun onQueryTextChange(newText: String): Boolean = false
            })
        }
    }

在这里,可以看到

search_menu.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">
    <!-- SearchView -->
    <item android:id="@+id/search"
        android:title="@string/search"
        android:icon="@drawable/search"
        app:showAsAction="collapseActionView|ifRoom"
        app:actionViewClass="androidx.appcompat.widget.SearchView" />

    <item android:id="@+id/profile_icon"
        android:title="@string/profile"
        android:icon="@drawable/account"
        app:showAsAction="collapseActionView|ifRoom"/>
</menu>

我需要在我的代码中添加什么,以便在我按下后退按钮而不先关闭 SearchView 的情况下应用程序直接导航回上一个屏幕?

android android-fragments searchview navigation-architecture
1个回答
0
投票

问题是

app:showAsAction="collapseActionView|ifRoom"
.

collapseActionView
表示 后退按钮首先关闭搜索视图。您已第二次按后退按钮导航到上一个屏幕。

回答你的问题,从

collapseActionView
中删除
app:showAsAction
,你会得到你想要的行为(按后退按钮将导航到上一个屏幕)。

但是您可能还想以编程方式关闭键盘,因为它在导航到上一个屏幕时保持打开状态。

© www.soinside.com 2019 - 2024. All rights reserved.