如何在Android中的searchview中返回按钮

时间:2014-11-21 17:31:24

标签: android searchview

我一直在互联网上搜索超过4个小时如何在打开searchview时让后退按钮正常工作但我无法实现它。

这是我的搜索视图。

    searchview  = (SearchView) findViewById(R.id.searchView);
        searchview.setOnClickListener(this);
  @Override
    public void onClick(View v) {
        if (v.getId() == R.id.searchView){

           //Cursor cursor = manager.obtenerIDColumnaServicio(searchview.getQuery().toString());
            adapterOfDataBase.changeCursor(cursor);
        }
    }

这是xml:

   <SearchView
                    android:layout_width="match_parent"
                    android:layout_height="63dp"
                    android:id="@+id/searchView"
                    android:iconifiedByDefault="true"
                    android:backgroundTint="#ff000000"
                    android:layout_marginRight="0dp" />

所有这一切都使用SQL和一些方法来插入,删除等表格&amp;条目。 所以我的问题是每次我点击它展开的搜索视图以便编写文本,一切都好,但是当我从android推回按钮时没有任何反应。

如果你可以帮助我,我尝试了2个选项但没有效果....

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) { //MEJORAR ESTO
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        searchview.onActionViewCollapsed();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}
//None of this 2 methods are working. I tried them separately
@Override
public void onBackPressed(){
    if (!this.searchview.isIconified()) {
        this.searchview.setIconified(true);
    } else {
        super.onBackPressed();
    }
}

5 个答案:

答案 0 :(得分:9)

当searchView打开并按下后退按钮时,您希望看到searchView关闭(也就是setIconified(true))这是根据谷歌应用搜索视图实现的标准行为。

所以你需要做的就是那样

    mSearchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus) {
                mSearchView.setIconified(true);
            }
        }
    });

答案 1 :(得分:4)

就我而言,只需添加:

setFocusableInTouchMode(true);

到SearchView可以解决此问题,

希望它有所帮助,

答案 2 :(得分:2)

尝试在MenuItem上使用OnActionExpandListener

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_search, menu);
        SearchManager searchManager =
                (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        MenuItem searchItem = menu.findItem(R.id.search);
        SearchView searchView = null;
        if (searchItem != null) {
            searchView = (SearchView) searchItem.getActionView();
        }
        if (searchView != null) {
            searchView.setSearchableInfo(searchManager.getSearchableInfo(MainActivity.this.getComponentName()));
        }
        searchItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
            @Override
            public boolean onMenuItemActionExpand(MenuItem item) {
                return true;
            }

        @Override
        public boolean onMenuItemActionCollapse(MenuItem item) {
            // TODO do your stuff when back button is pressed
            return true;
        }
    });
    return super.onCreateOptionsMenu(menu);
}

如果您使用AppCompatSupportv7

MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.OnActionExpandListener() {
            @Override
            public boolean onMenuItemActionExpand(MenuItem item) {
                return true;
            }

            @Override
            public boolean onMenuItemActionCollapse(MenuItem item) {
                // TODO do your stuff when back button is pressed
                return true;
            }
        });

答案 3 :(得分:0)

而不是this.searchview.setIconified(true)如果您使用的是支持库,请尝试此操作:

searchview.onActionViewCollapsed();
supportInvalidateOptionsMenu();

或者,如果您没有使用支持库:

searchview.onActionViewCollapsed();
invalidateOptionsMenu();

答案 4 :(得分:0)

Android 9 开始,Google自行解决了此问题。