我怎样才能得到onBack pressed(),而搜索查看被激活? [英] How can I get onBackPressed() while SearchView is activated?

查看:165
本文介绍了我怎样才能得到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);
    sea​​rchMenuItem.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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆