我搜索了有关我的问题的所有堆栈溢出答案,但没有运气。我只想使用搜索视图和搜索数据。菜单正确充气。但是当我提交搜索查询时,不会调用onQueryTextSubmit()。我不知道我要去哪里错了。我也没有在searchview上看到“提交”按钮。
这就是方法
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_main,menu);
MenuItem item = menu.findItem(R.id.action_search);
SearchView searchView =(SearchView) item.getActionView();
searchView.setSubmitButtonEnabled(true);
searchView.setOnQueryTextListener(this);
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onQueryTextSubmit(String query) {
Toast.makeText(SearchDonorsActivity.this, query, Toast.LENGTH_SHORT).show();
searchUsers(query);
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
这是app_bar的布局
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
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">
<androidx.appcompat.widget.Toolbar
android:id="@+id/topAppBar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:title="Search Donors"
app:menu="@menu/menu_main"
style="@style/Widget.MaterialComponents.Toolbar.Primary"
/>
</com.google.android.material.appbar.AppBarLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
帮我解决这个问题
答案 0 :(得分:1)
好吧,由于您使用的是菜单项,因此我认为您的实现尚不完整。您需要将其作为搜索窗口小部件进行管理,这在您的代码中并不明显。我的实现如下:
override fun onCreateOptionsMenu(menu: Menu): Boolean {
// Inflate the menu; this adds items to the action bar if it is present.
menuInflater.inflate(R.menu.menu_main, menu)
val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager
(menu.findItem(R.id.action_search)?.actionView as SearchView).apply {
queryHint = getString(R.string.search_donor_name)
setSearchableInfo(searchManager.getSearchableInfo(componentName))
setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String?): Boolean {
if (findNavController(R.id.nav_host_fragment).currentDestination?.id == R.id.fragmentName) {
Toast.makeText(SearchDonorsActivity.this, query, Toast.LENGTH_SHORT).show()
searchUsers(query)
}
return true
}
override fun onQueryTextChange(newText: String?): Boolean {
if (findNavController(R.id.nav_host_fragment).currentDestination?.id == R.id.fragmentName) {
Toast.makeText(SearchDonorsActivity.this, query, Toast.LENGTH_SHORT).show()
searchUsers(query)
}
return true
}
})
}
// Hide search and show only in fragments with searchable lists
menu.findItem(R.id.searchItem)?.isVisible = false
return super.onCreateOptionsMenu(menu)
}
此代码段适用于具有多个片段的单个活动应用程序,这就是为什么我在获得查询之前要检查当前目的地的原因。