2015-05-08 2 views
12

Ich verwende Android Sliding Menu using Navigation Drawer. Ich weiß, dass onWindowFocusChanged auf MainActivity arbeiten. Wie kann ich überprüfen, ob es sich auf Fragment konzentriert hat?Wie bekomme ich das onWindowFocusChanged auf Fragment?

jemand sagte, dass ich die zu fragment übergeben kann, aber ich weiß nicht, wie das geht. Kann mir jemand einen Beispielcode geben?

Ich möchte laufen ↓ diese auf meinem Fragment

@Override 
public void onWindowFocusChanged(boolean hasFocus) { 
    super.onWindowFocusChanged(hasFocus); 

    if (hasFocus) { 
     //I need to do someing. 
     method(); 
    } 
} 

Antwort

15

Sie entweder eine Schnittstelle erstellen und alle Fragmente diese Schnittstelle implementieren, und in Ihrem onWindowFocusChanged Sie das aktuelle Fragment erhalten und das Verfahren zur Verfügung gestellt passieren aufrufen, indem Sie die Schnittstelle.

konnte Eine Probe Schnittstelle für die Fragmente sein:

public class MyFragment implements IOnFocusListenable { 
    .... 
    public void onWindowFocusChanged(boolean hasFocus) { 
     ... 
    } 
} 

Und im onWindowFocusChanged Ihrer Aktivität können Sie dann folgendes tun:

public interface IOnFocusListenable { 
    public void onWindowFocusChanged(boolean hasFocus); 
} 

Ihre Fragmente diese Schnittstelle implementieren:

public class MyActivity extends AppCompatActivity { 
    @Override 
    public void onWindowFocusChanged(boolean hasFocus) { 
     super.onWindowFocusChanged(hasFocus); 

     if(currentFragment instanceof IOnFocusListenable) { 
      ((IOnFocusListenable) currentFragment).onWindowFocusChanged(hasFocus); 
     } 
    } 
} 

Oder Sie erstellen einen Listener und das aktive Fragment wird dem Listener hinzugefügt. Wenn also das Fragment sichtbar gemacht wird, abonnieren Sie diesen Listener, und jedes Mal, wenn das Ereignis onWindowFocusChanged aufgerufen wird, rufen Sie diesen Listener auf.

Dieser Ansatz ist sehr ähnlich den oben mit dem Unterschied, dass es eine Liste der IOnFocusListenable ‚s ist und diese werden in den Aktivitäten onWindowFocusChanged Methode

+0

Große Antwort, sehr hilfreich und ordentlich! – arniotaki

-3

Dies ist die beste Lösung

view.post(new Runnable() { 
        @Override 
        public void run() { 
          // do your stuff here 
        } 
       } 
    ); 
+5

Beste Lösung für was? Dies hat nichts mit der Fokusänderung des Fensters zu tun – Brian

9

Von ausgelöst API 18 können Sie diesen Code verwenden direkt in Ihr Fragment:

view.getViewTreeObserver().addOnWindowFocusChangeListener(new ViewTreeObserver.OnWindowFocusChangeListener() { 
    @Override 
    public void onWindowFocusChanged(final boolean hasFocus) { 
     // do your stuff here 
    } 
}); 

oder einfacher mit Lambda:

view.getViewTreeObserver().addOnWindowFocusChangeListener(hasFocus -> { /*do your stuff here*/ }); 

Wo man den Blick in bekommen onViewCreated oder einfach getView() von überall anrufen.