Android SearchView OnQueryTextListener 不工作

Android SearchView OnQueryTextListener Not Working

我正在尝试使用 Material UI 组件在 Fragment 中实现 searchView,但在设置侦听器时我似乎无法获得任何输出,所以我猜我错过了设置过程中的一个步骤。

问题

因此,当我加载我的应用程序并开始在搜索视图中输入内容时,我希望在 Android Studio 的 logcat 中看到一些输出,但似乎没有显示任何内容。

我做了什么

使用 Material UI 工具栏创建了 XML 布局。

...
    <com.google.android.material.appbar.AppBarLayout
    android:id="@+id/app_bar_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:fitsSystemWindows="true"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

    <com.google.android.material.appbar.MaterialToolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="#000000"
        app:menu="@menu/menu_search"
        app:navigationIcon="@drawable/ic_arrow_back" />

</com.google.android.material.appbar.AppBarLayout>
...

创建了一个菜单项(menu_search.xml)

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
    android:id="@+id/action_search"
    android:icon="@drawable/ic_search_24dp"
    android:title="Menu Search"
    app:actionViewClass="androidx.appcompat.widget.SearchView"
    app:showAsAction="always" />

在我的片段中

override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
    inflater.inflate(R.menu.menu_search, menu)

    val search = menu.findItem(R.id.action_search)
    val searchView = search.actionView as SearchView

    searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
        override fun onQueryTextSubmit(query: String?): Boolean {
            Timber.d("onQueryTextSubmit")
            return false
        }

        override fun onQueryTextChange(newText: String?): Boolean {
            Timber.d("onQueryTextChange $newText")
            return false
        }
    })

    super.onCreateOptionsMenu(menu, inflater)
}

其他可能相关的事情

非常感谢任何帮助,谢谢。

尝试在片段的 onCreateView 方法中实例化您的菜单:

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? 
{
    val view = inflater.inflate(<your-fragment-layout>, container, false)

    view.findViewById<MaterialToolbar>(R.id.toolbar).apply {
        val searchView = menu.findItem(R.id.action_search).actionView
        searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
            override fun onQueryTextSubmit(query: String?): Boolean {
                Timber.d("onQueryTextSubmit")
                return false
            }

            override fun onQueryTextChange(newText: String?): Boolean {
                Timber.d("onQueryTextChange $newText")
                return false
            }
        })
    }
    
    ...

    return view
}