2016-08-01 4 views
0

Ich verwende ein Layout mit einer Suchansicht unter der Symbolleiste, und direkt unter der Suchansicht habe ich ein Layout platziert, das ein Fragment und einen FloatingActionButton enthält.Fokus der Suchansicht kann nicht gelöscht werden, während Fragmente verschoben werden

enter image description here

Die Suche hat eine Auto-Funktionalität, die Stadt Name vermuten lässt.

Wenn ich die Suchschaltfläche drücke, wird die Abfrage gesendet, der Fokus verloren und die Vorschläge ausgeblendet (so soll es funktionieren).

Wenn ich jedoch das Fragment (von ListView zu MapView) ändere, indem ich auf den FloatingActionButton klicke, greift die Suchansicht erneut auf den Fokus und beginnt mit der Anzeige dieser Vorschläge, also Städtenamen.

enter image description here

ich den folgenden Code verwende die Fragmente zu ändern und löschen Sie den Fokus

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

Was ich brauchen, ist, dass die Suche sollte nicht den Fokus haben, bis und es sei denn, i auf klicken es wieder.

Ich bin wirklich hier fest, jede Art von Hilfe würde wirklich geschätzt werden. Danke.

Antwort

2

Fokus zu löschen, während Fragmente Schalen, sollten Sie es in Ihrem Fragmente

Überschreibung clearFocus onCreate()

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

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

hoffen, es hilft!

Verwandte Themen