我一直在互联网上搜索超过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();
}
}
答案 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自行解决了此问题。