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)
}
其他可能相关的事情
- 我没有覆盖片段中的 onOptionsItemSelected。
- 我正在使用数据绑定。
非常感谢任何帮助,谢谢。
尝试在片段的 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
}
我正在尝试使用 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)
}
其他可能相关的事情
- 我没有覆盖片段中的 onOptionsItemSelected。
- 我正在使用数据绑定。
非常感谢任何帮助,谢谢。
尝试在片段的 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
}