【问题标题】:how to handle back button of Search View in android如何在android中处理搜索视图的后退按钮
【发布时间】:2014-09-15 07:09:19
【问题描述】:
SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(Menus.SEARCH));
searchView.setQueryHint(this.getString(R.string.search));
editSearch = (EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
editSearch.setHintTextColor(getResources().getColor(R.color.white));
searchView.setOnQueryTextListener(OnQuerySearchView);


private OnQueryTextListener OnQuerySearchView = new OnQueryTextListener() {

    @Override
    public boolean onQueryTextSubmit(String newText) {
        if (TextUtils.isEmpty(newText)) {
            listAllContact.clearTextFilter();
        } else {
            listAllContact.setFilterText(newText.toString());
        }
        return true;
    }

    @Override
    public boolean onQueryTextChange(String newText) {
        String text = editSearch.getText().toString()
                .toLowerCase(Locale.getDefault());
        adapter.filter(text);
        return true;
    }

};

【问题讨论】:

标签: android searchview


【解决方案1】:

MenuItemCompat.setOnActionExpandListener 现已弃用

使用

menu.findItem(R.id.action_search)setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
    @Override
    public boolean onMenuItemActionExpand(MenuItem menuItem) {
        return false;
    }

    @Override
    public boolean onMenuItemActionCollapse(MenuItem menuItem) {
        return false;
    }
});

改为

【讨论】:

    【解决方案2】:

    如果您使用 android.support.v7.widget.SearchView 作为菜单项:

    <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"
            android:title=""
            app:showAsAction="ifRoom|collapseActionView"
            app:actionViewClass="android.support.v7.widget.SearchView"/>
    </menu>
    

    您可以使用以下方式处理后退按钮(用于展开状态):

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu, menu);
        MenuItem searchItem = menu.findItem(R.id.action_search);
        searchItem.expandActionView();
        MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.OnActionExpandListener() {
            @Override
            public boolean onMenuItemActionExpand(MenuItem item) {
                return true;
            }
    
            @Override
            public boolean onMenuItemActionCollapse(MenuItem item) {
                // Write your code here
                return true;
            }
        });
    }
    

    【讨论】:

    • 您能否为您的答案添加一点解释?
    • 只需将所有返回值都设置为 TRUE,否则它们将不起作用。工作和测试。竖起大拇指@Atetc
    • 正确答案。谷歌分离 searchview onclose 监听器真的很奇怪。即使在 23+ API 上
    • 这是不推荐使用的方法,使用以下方法:stackoverflow.com/a/48989340/4026686
    【解决方案3】:

    这是一种方法 -

    @Override
    public void onBackPressed() {
    
        // Write your code here
    
        super.onBackPressed();
    }
    

    【讨论】:

    • 投反对票?这个问题没有明确提出,根据我的理解,提问者需要找出按下后退按钮时如何处理操作,而我的解决方案正是这样做的。
    • 你说得有道理。这是有史以来最糟糕的问题。没有一个关于问题的细节......
    • 这不是答案。问题是关于搜索视图的后退箭头图标按下。
    【解决方案4】:

    如果你使用搜索对话框,你可以为 Kotlin 做这样的事情

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        val id = item.itemId
    
        return if (id == R.id.search_button) {
            val searchManager = this.getSystemService(Context.SEARCH_SERVICE) as SearchManager
            searchManager.setOnDismissListener {
                // return the activity to the normal state
            }
            // set activity to search state then request search
            onSearchRequested()
        } else super.onOptionsItemSelected(item)
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-22
      • 1970-01-01
      • 2021-10-13
      • 1970-01-01
      • 2011-10-26
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      相关资源
      最近更新 更多