在 SearchView 中覆盖 BackButton 按下
override BackButton press in SearchView
我对在 fragment
中使用 SearchView
很生气,无论我是否触摸搜索栏,后退按钮总是显示,我进行了搜索,但我有一个问题后退按钮只清除搜索中的文本,我想用它在 fragments
之间切换。我在堆栈溢出问题上尝试了很多解决方案,但似乎没有解决我的问题。
在 fragment
中添加 toolbar
后的代码:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.search_menu_fragment, menu);
MenuItem searchItem = menu.findItem(R.id.action_search_locations);
SearchView searchView = new SearchView(((AppCompatActivity)getActivity()).getSupportActionBar().getThemedContext());
MenuItemCompat.setShowAsAction(searchItem, searchItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW ); //searchItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW |
MenuItemCompat.setActionView(searchItem, searchView);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
// filter recycler view when query submitted
locationStatesPreviewAdapter.getFilter().filter(query);
return false;
}
@Override
public boolean onQueryTextChange(String query) {
// filter recycler view when text is changed
Log.e("QueryChange",query);
locationStatesPreviewAdapter.getFilter().filter(query);
return false;
}
});
}
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">
<item android:id="@+id/action_search_locations"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:title="@string/app_name"
android:icon="@android:drawable/ic_menu_search"
app:showAsAction="always|collapseActionView"
app:actionViewClass="android.support.v7.widget.SearchView" />
</menu>
谢谢。
这是一个误解的问题,因为我认为它是 Fragment 中 SearchView 的后退按钮,后来它是工具栏导航按钮,添加这行使其响应后,所有事情都完成了!感谢大家的帮助。
((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);
((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
((AppCompatActivity)getActivity()).getSupportActionBar().setTitle("TOOLBAR");
toolbar.setNavigationOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
Toast.makeText(getActivity(), "Back clicked!", Toast.LENGTH_SHORT).show();
}
});
我对在 fragment
中使用 SearchView
很生气,无论我是否触摸搜索栏,后退按钮总是显示,我进行了搜索,但我有一个问题后退按钮只清除搜索中的文本,我想用它在 fragments
之间切换。我在堆栈溢出问题上尝试了很多解决方案,但似乎没有解决我的问题。
在 fragment
中添加 toolbar
后的代码:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.search_menu_fragment, menu);
MenuItem searchItem = menu.findItem(R.id.action_search_locations);
SearchView searchView = new SearchView(((AppCompatActivity)getActivity()).getSupportActionBar().getThemedContext());
MenuItemCompat.setShowAsAction(searchItem, searchItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW ); //searchItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW |
MenuItemCompat.setActionView(searchItem, searchView);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
// filter recycler view when query submitted
locationStatesPreviewAdapter.getFilter().filter(query);
return false;
}
@Override
public boolean onQueryTextChange(String query) {
// filter recycler view when text is changed
Log.e("QueryChange",query);
locationStatesPreviewAdapter.getFilter().filter(query);
return false;
}
});
}
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">
<item android:id="@+id/action_search_locations"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:title="@string/app_name"
android:icon="@android:drawable/ic_menu_search"
app:showAsAction="always|collapseActionView"
app:actionViewClass="android.support.v7.widget.SearchView" />
</menu>
谢谢。
这是一个误解的问题,因为我认为它是 Fragment 中 SearchView 的后退按钮,后来它是工具栏导航按钮,添加这行使其响应后,所有事情都完成了!感谢大家的帮助。
((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);
((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
((AppCompatActivity)getActivity()).getSupportActionBar().setTitle("TOOLBAR");
toolbar.setNavigationOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
Toast.makeText(getActivity(), "Back clicked!", Toast.LENGTH_SHORT).show();
}
});