Searchview需要额外的onBackPressed

时间:2016-06-22 19:03:56

标签: android fragment searchview

我试图解决这个问题差不多一个星期,但我仍然不知道为什么会这样。我有一个带有OnQueryTextListener()的Searchview:

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;
}

因此,当展开searchview时,我用一个特殊的Search_fragment替换当前片段。

public void onBackPressed() {
    if (!searchView.isIconified()) {
        searchView.setIconified(true);
        onBackPressed();
    }
    super.onBackPressed();
    drawerToggle.setDrawerIndicatorEnabled(true);
}

但是如果我想隐藏我的搜索视图并回到我之前的片段,我需要按两次 - 第一次崩溃它,第二次 - 回去。我以编程方式尝试 searchView.clearFocus()并在 if(!searchView.isIconified())内调用 onBackPressed()两次,但它仍然没有不行。也许这是一个非常愚蠢的问题,但我真的很感激任何帮助。

1 个答案:

答案 0 :(得分:0)

最后,我找到了解决方案。我刚刚添加了

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();
        }
});