2016-08-01 3 views
0

Я использую макет, имеющий вид поиска под панелью инструментов, и прямо под окном поиска я разместил макет, содержащий фрагмент и плавающий элемент управления.Невозможно очистить фокус поиска и андроида при переключении фрагментов

enter image description here

Вид поиска имеет автозаполнения функциональность, которая предполагает название города.

Когда я нажимаю кнопку поиска, он отправляет запрос, теряет фокус и скрывает предложения (вот как он должен работать).

Но когда я изменяю фрагмент (из списка ListView в MapView), нажав кнопку FloatingActionButton, поисковый вид снова захватывает фокус и начинает показывать те предложения, то есть названия городов.

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

Что мне нужно, что поиск Просмотр не должен иметь фокуса до тех пор, пока я не нажму на снова.

Я действительно застрял здесь, любая помощь действительно будет оценена. Благодарю вас.

ответ

2

Чтобы очистить фокус при переключении фрагментов, вы должны clearFocus его в фрагменте

переопределение 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(); 
    } 
} 

надеюсь, что это помогает!

Смежные вопросы