我该如何处理onBackPressed()
在搜索模式?我已经在以下位置实施了搜索ActionBar
,我想处理onBackPressed()
.
Edit:
At MainActivity
我已经添加了这个,但只有在搜索关闭时才会收到通知
@Override
public void onBackPressed() {
mMenu.findItem(R.id.menu_eye).setVisible(true);
mMenu.findItem(R.id.menu_layers).setVisible(true);
super.onBackPressed();
};
我的搜索操作侦听器如下所示:
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();
}
}
另一种方法是监听 MenuItem 的 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
我认为这种方式更干净,因为你可以直接收听你想要的内容
谢谢这个线程 https://groups.google.com/d/msg/actionbarsherlock/l6Xp4UTx5kQ/f8Ly1rgJuGcJ
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)