我正在使用 Android Jetpack 导航组件在片段之间来回导航。在一个片段上,我有一个扩展形式的 SearchView。当我按下后退按钮(SearchView 的左侧)时,会发生以下情况:
为什么?为什么它不直接导航到上一个屏幕?
在这里,可以看到片段中处理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 的情况下应用程序直接导航回上一个屏幕?
问题是
app:showAsAction="collapseActionView|ifRoom"
.
collapseActionView
表示 后退按钮首先关闭搜索视图。您已第二次按后退按钮导航到上一个屏幕。
回答你的问题,从
collapseActionView
中删除app:showAsAction
,你会得到你想要的行为(按后退按钮将导航到上一个屏幕)。
但是您可能还想以编程方式关闭键盘,因为它在导航到上一个屏幕时保持打开状态。