2016-11-03 33 views
0

Ich habe gelernt, wie man in Android programmiert, aber ich habe ein paar Probleme.getFragmentManager() gibt null beim zweiten Aufruf zurück

Gerade jetzt weiß ich nicht wirklich, wie man eine Fragment beendet. Ich meine, wenn ich die Methode getActivity().finish() verwende, sollte meine Activityfinish(). Ich habe darüber gelesen, und es ist überhaupt nicht korrekt. Ich stieß auf this post:

Auch onDestroy() ist kein Destruktor. Es zerstört das Objekt tatsächlich nicht. Es ist nur eine Methode, die auf einem bestimmten Zustand basiert. So Ihre Instanz ist immer noch am Leben und sehr gut * nach der Superklasse onDestroy() läuft und returns.Android hält Prozesse rund um der Benutzer möchte die App neu starten, macht dies die Startphase schneller. Der Prozess wird nichts tun, und wenn der Speicher zu muss zurückgewonnen werden, wird der Prozess

Und this one getötet werden:

Bedenken Sie, dass Sie dann Hintergrund Ihrer Anwendung, und dann wird es getötet . Wenn Sie zurückkommen, wird Android daran denken, dass Sie die Fragments A, B und C im Fragmentmanager verwendet haben, und so erstellt es für Sie neu und fügt sie dann hinzu. Allerdings sind diejenigen, die der Fragment-Manager jetzt sind nicht diejenigen, die Sie in Ihren Fragmenten Liste in Ihrer Aktivität haben.

In meinem Fall habe ich zwei Aktivitäten und zwei Fragmente. Das erste Mal, dass ich diesen Prozess benutzt habe, hat es perfekt funktioniert.

  • ich zu meinem zweiten Activity vom ersten Anruf über eine Intent
  • ich zum ersten Anruf Fragment
  • ich von den ersten Fragment zum zweiten Anruf

Das Problem ist, dass, wenn ich den Knopf "Reset" drücke, dass es meine Activity von der zweiten Fragment beendet (so geht es zum ersten Activity). Danach wiederhole ich den gesamten Prozess und es tatsächlich funktioniert, aber wenn ich versuche, um die nächste Zeile zu implementieren zu halten Aktualisierung der Daten:

private BroadcastReceiver estadoIAReceiver = new BroadcastReceiver() { 

    //Cuando cambia el estado de indoor atlas actualizo la interfaz con sus propiedades 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.i("VFragment", "Cambio estado IA"); 

     //Ejecutar metodo de un fragment desde una actividad 
     infoF = (InformacionFragment) getFragmentManager().findFragmentById(R.id.posicionamiento_layout); 
     infoF.actualizaInfoEstadoIA(); 
     infoF.onResume(); 
    } 
}; 

Es null weil getFragmentManager().findFragmentById(R.id.posicionamiento_layout); kehrt ausfällt. Also, im Grunde ist meine Frage; ist infoF versucht, auf die gleiche Fragment von der ersten Zeit zugreifen, aber es existiert nicht, so dass es null zurückgibt?

+1

Ich verstehe Ihre Frage nicht, aber wenn das Fragment nicht in FragmentManager (ist Null), dann sollten Sie ein neues hinzufügen, weil es zerstört wurde, und aus Fragmentmanager –

+0

Ich meine, der Code funktioniert der erste Zeit (also während der ersten Zeit, dass ich es ausführe, bekomme ich nicht "null"). Also ich weiß nicht wirklich, warum bekomme ich es @ Bryan –

+0

Ich denke, du meintest @VladMatvienko. Wie auch immer, zeige mehr Code; Es gibt nichts in dem von Ihnen bereitgestellten Code, der zeigt, warum 'getFragmentMangager() '' null' zurückgibt. Auch diese Zeile: "Ich rufe vom ersten' Fragment' zum zweiten "klingt verdächtig. Sie sollten nicht von einem "Fragment" zum anderen aufrufen, die "Aktivität" sollte Transaktionen zwischen Fragmenten behandeln. – Bryan

Antwort

0

Endlich, vor einigen Tagen konnte ich meinen Fehler finden.

Die Lösung ist einfach:

  • einfach ein neues Bundle Variable als globale Variable

Bundle datosGuardados erstellen;

  • die Daten zu speichern savedInstanceState

datosGuardados = savedInstanceState;

  • und schließlich nur noch prüfen, ob es null ist, bevor als jeden getFragmentManager mit

if (datosGuardados! = Null) infoF = (InformacionFragment) getFragmentManager(). FindFragmentById (R.id.posicionamiento_layout) ;

Verwandte Themen