在Android中使用searchview时,如何使“返回”按钮正常工作
我已经在互联网上搜索了4个多小时,如何在打开searchview时让后退按钮正常工作,但我就是无法实现 这是我的搜索视图在Android中使用searchview时,如何使“返回”按钮正常工作,android,searchview,Android,Searchview,我已经在互联网上搜索了4个多小时,如何在打开searchview时让后退按钮正常工作,但我就是无法实现 这是我的搜索视图 searchview = (SearchView) findViewById(R.id.searchView); searchview.setOnClickListener(this); @Override public void onClick(View v) { if (v.getId() == R.id.search
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" />
如果您正在使用支持库,请尝试以下方法,而不是使用此.searchview.SetIconnified(true):
searchview.onActionViewCollapsed();
supportInvalidateOptionsMenu();
searchview.onActionViewCollapsed();
invalidateOptionsMenu();
如果不使用支持库,请执行以下操作:
searchview.onActionViewCollapsed();
supportInvalidateOptionsMenu();
searchview.onActionViewCollapsed();
invalidateOptionsMenu();
当searchView打开并按下后退按钮时,您希望看到searchView关闭(也称为SetIconnified(true)),这是google apps searchView实现的标准行为 所以你需要做的就是这样
mSearchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
mSearchView.setIconified(true);
}
}
});
就我而言,我只是补充:
setFocusableInTouchMode(true);
将SearchView作为此问题的解决方案
希望有帮助,尝试在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;
}
});
从Android 9开始,Google自己解决了这个问题。如果活动中有另一个可编辑控件(即EditText),那么SearchView将无法正确获取焦点。添加一个setQuery(“,false);在为我工作之前。因此,我的代码如下所示:if(!hasFocus){setQuery(“,false);setIconified(true);}虽然第一个选项不再有效,但第二个选项显然有效。下面是正确的方法: