我试图将近一个星期解决这个问题,但是我仍然不知道为什么会发生这种情况。我有一个带有onqueryTextListener()的搜索视图:
public boolean onQueryTextChange(String newText) {
if(newText.length()==0) {
if(!(getSupportFragmentManager().findFragmentById(R.id.routesFragment) instanceof Fragment_Search)) {
fragment_search = new Fragment_Search();
replaceFragment(fragment_search);
}
}
if (newText.length()>0){
final DatabaseAccess databaseAccess = DatabaseAccess.getInstance(getApplicationContext());
databaseAccess.open();
ArrayList<Route_Common> list = databaseAccess.searchInDB(newText);
databaseAccess.close();
fragment_search.listChanged(list);
}
return false;
}
所以,当搜索视图扩展时,我用特殊的search_fragment替换当前片段。
public void onBackPressed() {
if (!searchView.isIconified()) {
searchView.setIconified(true);
onBackPressed();
}
super.onBackPressed();
drawerToggle.setDrawerIndicatorEnabled(true);
}
但是,如果我想隐藏我的搜索视图并返回到以前的片段,我需要按两次 - 首次将其倒塌,第二次 - 返回。我尝试了 searchView.clearfocus()编程性,然后调用 onbackPressed()> if(!searchview.isiconified())工作。也许这是一个非常愚蠢的问题,但我真的很感谢任何帮助。
最后,我找到了一个解决方案。我刚刚添加
searchView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
@Override
public void onViewAttachedToWindow(View v) {
Log.d("MyTag","Search Expanded");
fragment_search = new Fragment_Search();
replaceFragment(fragment_search);
}
@Override
public void onViewDetachedFromWindow(View v) {
Log.d("MyTag","Search Hide");
onBackPressed();
}
});