我怎样才能得到onBack pressed(),而搜索查看被激活? [英] How can I get onBackPressed() while SearchView is activated?
本文介绍了我怎样才能得到onBack pressed(),而搜索查看被激活?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何处理 onBack pressed()
在搜索模式?我已经实现了搜索的动作条
,我想处理 onBack pressed()
。
编辑:
在 MainActivity
我加入了这一点,但只得到通知时,搜索被关闭
@覆盖
公共无效onBack pressed(){
mMenu.findItem(R.id.menu_eye).setVisible(真正的);
mMenu.findItem(R.id.menu_layers).setVisible(真正的);
super.onBack pressed();
};
和我的侦听器的搜索行动是这样的:
进口com.cyrilmottier.polaris.PolarisMapView;
进口android.app.SearchManager.OnCancelListener;
进口android.content.Context;
进口android.view.Menu;
进口android.view.View;
进口android.view.View.OnClickListener;
进口android.widget.SearchView;
公共类SearchListener实现SearchView.OnQueryTextListener,SearchView.OnCloseListener,SearchView.OnSuggestionListener,OnClickListener,OnCancelListener {
私人语境mContext;
私人PolarisMapView mMapView;
私人菜单mMenu;
私人搜索查看mSearchView;
公共SearchListener(上下文C,PolarisMapView mMapView,菜单mMenu,搜索查看mSearchView){
this.setmContext(C);
this.setmMapView(mMapView);
this.setmMenu(mMenu);
this.mSearchView = mSearchView;
}
@覆盖
公共布尔onQueryTextChange(字符串newText){
返回false;
}
@覆盖
公共布尔onQueryTextSubmit(查询字符串){
如果(Constants.searchPlaceNavigate(查询,mContext,mMapView))
返回this.onClose();
返回false;
}
公共语境getmContext(){
返回mContext;
}
公共无效setmContext(上下文mContext){
this.mContext = mContext;
}
公共PolarisMapView getmMapView(){
返回mMapView;
}
公共无效setmMapView(PolarisMapView mMapView){
this.mMapView = mMapView;
}
@覆盖
公共布尔onSuggestionClick(INT位置){
串P = mSearchView.getSuggestionsAdapter()getCursor()的getString(位置)。
如果(位置== 0)
。P = mSearchView.getSuggestionsAdapter()getCursor()的getString(位置* 4 + 1);
如果(P!= NULL)
如果(位置== 0)
Constants.searchPlaceNavigate(mSearchView.getSuggestionsAdapter().getCursor().getString(position*4+1), mContext,mMapView);
其他
Constants.searchPlaceNavigate(mSearchView.getSuggestionsAdapter()getCursor()的getString(位置),mContext,mMapView);
返回this.onClose();
}
@覆盖
公共布尔onSuggestionSelect(INT位置){
返回false;
}
@覆盖
公共布尔的OnClose(){
mMenu.findItem(R.id.menu_eye).setVisible(真正的);
mMenu.findItem(R.id.menu_layers).setVisible(真正的);
mMenu.findItem(R.id.menu_search).collapseActionView();
返回true;
}
公共菜单getmMenu(){
返回mMenu;
}
公共无效setmMenu(菜单mMenu){
this.mMenu = mMenu;
}
公共搜索查看getmSearchView(){
返回mSearchView;
}
公共无效setmSearchView(搜索查看mSearchView){
this.mSearchView = mSearchView;
}
@覆盖
公共无效的onClick(视图v){
this.onClose();
}
@覆盖
公共无效OnCancel的(){
this.onClose();
}
}
解决方案
另一种方式是在菜单项的ActionExpand /折叠听:
菜单项searchMenuItem = menu.findItem(R.id.menu_search);
searchMenuItem.setOnActionExpandListener(新MenuItem.OnActionExpandListener(){
@覆盖
公共布尔onMenuItemActionExpand(菜单项项){
//做任何你需要
返回true; //保持它为真或开不开!
}
@覆盖
公共布尔onMenuItemActionCollapse(菜单项项){
//做任何你需要
返回true; //还是假的,如果你不希望它关闭!
}
});
搜索查看搜索查看=(搜索查看)searchMenuItem.getActionView();
... //继续做你做
我觉得这样更干净,当你直接听你想要什么
由于这个线程
How can I handle onBackPressed()
at search mode? I have implemented the search at the ActionBar
, and I want to handle onBackPressed()
.
Edit:
At MainActivity
I have added this, but it only gets notified when search is closed
@Override
public void onBackPressed() {
mMenu.findItem(R.id.menu_eye).setVisible(true);
mMenu.findItem(R.id.menu_layers).setVisible(true);
super.onBackPressed();
};
and my listener for search action looks like this:
import com.cyrilmottier.polaris.PolarisMapView;
import android.app.SearchManager.OnCancelListener;
import android.content.Context;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.SearchView;
public class SearchListener implements SearchView.OnQueryTextListener, SearchView.OnCloseListener, SearchView.OnSuggestionListener, OnClickListener, OnCancelListener{
private Context mContext;
private PolarisMapView mMapView;
private Menu mMenu;
private SearchView mSearchView;
public SearchListener(Context c, PolarisMapView mMapView, Menu mMenu, SearchView mSearchView){
this.setmContext(c);
this.setmMapView(mMapView);
this.setmMenu(mMenu);
this.mSearchView = mSearchView;
}
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
@Override
public boolean onQueryTextSubmit(String query) {
if (Constants.searchPlaceNavigate(query, mContext, mMapView))
return this.onClose();
return false;
}
public Context getmContext() {
return mContext;
}
public void setmContext(Context mContext) {
this.mContext = mContext;
}
public PolarisMapView getmMapView() {
return mMapView;
}
public void setmMapView(PolarisMapView mMapView) {
this.mMapView = mMapView;
}
@Override
public boolean onSuggestionClick(int position) {
String p = mSearchView.getSuggestionsAdapter().getCursor().getString(position);
if(position== 0)
p = mSearchView.getSuggestionsAdapter().getCursor().getString(position*4+1);
if(p != null)
if(position== 0)
Constants.searchPlaceNavigate(mSearchView.getSuggestionsAdapter().getCursor().getString(position*4+1), mContext, mMapView);
else
Constants.searchPlaceNavigate(mSearchView.getSuggestionsAdapter().getCursor().getString(position), mContext, mMapView);
return this.onClose();
}
@Override
public boolean onSuggestionSelect(int position) {
return false;
}
@Override
public boolean onClose() {
mMenu.findItem(R.id.menu_eye).setVisible(true);
mMenu.findItem(R.id.menu_layers).setVisible(true);
mMenu.findItem(R.id.menu_search).collapseActionView();
return true;
}
public Menu getmMenu() {
return mMenu;
}
public void setmMenu(Menu mMenu) {
this.mMenu = mMenu;
}
public SearchView getmSearchView() {
return mSearchView;
}
public void setmSearchView(SearchView mSearchView) {
this.mSearchView = mSearchView;
}
@Override
public void onClick(View v) {
this.onClose();
}
@Override
public void onCancel() {
this.onClose();
}
}
解决方案
another way is to listen on the MenuItem for the ActionExpand/Collapse :
MenuItem searchMenuItem = menu.findItem(R.id.menu_search);
searchMenuItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
// Do whatever you need
return true; // KEEP IT TO TRUE OR IT DOESN'T OPEN !!
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
// Do whatever you need
return true; // OR FALSE IF YOU DIDN'T WANT IT TO CLOSE!
}
});
SearchView searchView = (SearchView) searchMenuItem.getActionView();
... // Keep doing as you do
I think this way is cleaner, as you listen directly on what you want
Thanks to this thread
这篇关于我怎样才能得到onBack pressed(),而搜索查看被激活?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文