2017-04-22 7 views
0

Ich habe eine SearchActivity, die funktioniert, aber ich möchte in der Lage sein, es durch Drücken von zurück zu schließen. Wenn ich das jetzt gerade mache, ist zuerst die Tastatur weg (was ich will), aber wenn ich es nochmal drücke, zerstöre ich das Fragment. Stattdessen möchte ich die Suche schließen. Weil ich in einem Fragment bin, kann ich kein onBackPressed() machen.Schließen SearchAction in einem Fragment durch Drücken Zurück

Aktuelle Code:

@Override 
    public void onBackPressed() { 
     // Only close if the Fragment reference is null. 
     if(Ships == null) 
     { 
      super.onBackPressed(); 
     } 
     else 
     { 
      Ships.onBackPressed(); 
     } 
    } 

Antwort

1

Wenn Sie wirklich brauchen, um Sie eine Referenz der Fragment halten können und das Fragment benachrichtigen, dass onBackPressed() aufgetreten. Obwohl dies Ihnen das gewünschte Ergebnis liefert, ist es nicht optimal.

Im Activity

@Override 
public void onBackPressed() 
{ 
    // Only close if the Fragment reference is null. 
    if(mFragment == null) 
    { 
     super.onBackPressed(); 
    } 
    else 
    { 
     mFragment.onBackPressed(); 
    } 
} 

Im Fragment

MyFragment extends Fragment 
{ 
    public void onBackPressed() 
    { 
     // Execute here. 
    } 
} 
+0

, die bis auf mFragment == null funktioniert. (Ausdruck erwartet) – newToEverything

+0

@newToEverything Könnten Sie überprüfen, es scheint, Sie haben ein '=' Zeichen vergessen. Es sollte '==' sein. Bitte lassen Sie mich wissen, wenn das Problem immer noch besteht. –

+0

Hinzugefügt den Code, den ich in der Post habe. – newToEverything

0

Aufschalten onBackPressed():

  1. If keyboard is open - lassen System handhaben zurück Presse-Event
  2. Wenn SearchView hat zur Zeit im Fokus - dann klar Fokus
  3. Sonst lassen Sie das System zurück drücken Ereignis.

    @Override 
    public void onBackPressed() { 
        final boolean isKeyboardOpen = ...; 
        if (isKeyboardOpen) { 
         super.onBackPressed(); 
        } else if (searchView.hasFocus()) { 
         searchView.clearFocus(); 
        } else super.onBackPressed(); 
    } 
    
Verwandte Themen