切换片段时无法清除Search View android的焦点

时间:2016-08-01 13:16:37

标签: android android-fragments

我正在使用工具栏下方具有搜索视图的布局,在搜索视图的正下方,我放置了一个包含片段和FloatingActionButton的布局。

enter image description here

搜索视图具有自动完成功能,可显示城市名称。

当我点击搜索按钮时,它会提交查询,失去焦点并隐藏建议(这是应该如何工作的)。

但是当我通过单击FloatingActionButton更改片段(从ListView到MapView)时,搜索视图再次抓住焦点并开始显示这些建议,即城市名称。

enter image description here

我使用以下代码更改片段并清除焦点

fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (flagFAB) {
                fab.setImageResource(android.R.drawable.ic_menu_sort_by_size);
                flagFAB = false;
                if (fragmentManager.findFragmentByTag("testFrag2") != null) {
                    Log.wtf(TAG, "if the fragment exists, show it.");
                    fragmentManager.beginTransaction().show(fragmentManager.findFragmentByTag("testFrag2")).commit();
                } else {
                    Log.wtf(TAG, "if the fragment does not exist, add it to fragment manager.");
                    fragmentManager.beginTransaction().add(R.id.tabListBM, testFrag2, "testFrag2").commit();
                }
                if (fragmentManager.findFragmentByTag("fragList") != null) {
                    Log.wtf(TAG, "if the other fragment is visible, hide it.");
                    fragmentManager.beginTransaction().hide(fragmentManager.findFragmentByTag("fragList")).commit();
                }
            } else {
                fab.setImageResource(android.R.drawable.ic_dialog_map);
                flagFAB = true;
                if (fragmentManager.findFragmentByTag("fragList") != null) {
                    //if the fragment exists, show it.
                    fragmentManager.beginTransaction().show(fragmentManager.findFragmentByTag("fragList")).commit();
                } else {
                    //if the fragment does not exist, add it to fragment manager.
                    fragmentManager.beginTransaction().add(R.id.tabListBM, listFrag, "fragList").commit();
                }
                if (fragmentManager.findFragmentByTag("testFrag2") != null) {
                    //if the other fragment is visible, hide it.
                    fragmentManager.beginTransaction().hide(fragmentManager.findFragmentByTag("testFrag2")).commit();
                }
            }
            clearFocusSearchView();

        }
    });

@Override
public void clearFocusSearchView() {

    if (title.contentEquals("city")) {
        Log.wtf(TAG, "CLEAR FOCUS MAP");
        searchView.requestFocus();
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(searchView.getWindowToken(), 0);
        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
        searchView.clearFocus();
    }
}

我需要的是搜索视图不应该有焦点,除非我再次点击它。

我真的被困在这里,任何形式的帮助都会非常感激。谢谢。

1 个答案:

答案 0 :(得分:2)

要在切换片段时清除焦点,您应该清除它在片段中的焦点

覆盖onCreate()

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {        
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}

和onCreateOptionsMenu

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
    searchView.setIconified(false);
    searchView.setIconifiedByDefault(false);
    searchView.clearFocus();
    }
}
希望它有所帮助!