我正在使用工具栏下方具有搜索视图的布局,在搜索视图的正下方,我放置了一个包含片段和FloatingActionButton的布局。
搜索视图具有自动完成功能,可显示城市名称。
当我点击搜索按钮时,它会提交查询,失去焦点并隐藏建议(这是应该如何工作的)。
但是当我通过单击FloatingActionButton更改片段(从ListView到MapView)时,搜索视图再次抓住焦点并开始显示这些建议,即城市名称。
我使用以下代码更改片段并清除焦点
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();
}
}
我需要的是搜索视图不应该有焦点,除非我再次点击它。
我真的被困在这里,任何形式的帮助都会非常感激。谢谢。
答案 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();
}
}
希望它有所帮助!