2017-01-25 2 views
-2

Hey Leute ich habe ein Problem beim Aufruf meiner Methode SignIn, die in meinem Fragment3 ist. Ich versuche es von einer Aktivität aus aufzurufen. Hier ist mein Code in meiner Aktivität versucht es zu nennen. Ich bekomme einen Null-Zeiger, wenn in dieser Zeile fragmentTransaction.add (R.id.loginfragment, fragment); Ich weiß, dass ich dir nicht viele Informationen über den Rest meines Codes gegeben habe, aber wenn du etwas anderes brauchst, lass es mich wissen. Ich benutze diese Importe über meine Klassen und Fragmente, also ist das in Ordnung. Jeder Rat wäre großartig! Danke im Voraus.So rufen Sie eine Methode in einem Fragment von einer Aktivität, Null erhalten

import android.support.v4.app.Fragment; 

import android.support.v4.app.FragmentManager; 

import android.support.v4.app.FragmentTransaction; 

      Fragment3 fragment = (Fragment3) getSupportFragmentManager().findFragmentById(R.id.loginfragment); 
      FragmentManager fm = getSupportFragmentManager(); 
      FragmentTransaction fragmentTransaction = fm.beginTransaction(); 
      getSupportFragmentManager().executePendingTransactions(); 
      fragmentTransaction.add(R.id.loginfragment, fragment); 
      fragmentTransaction.addToBackStack(null); 
      fragmentTransaction.commit(); 

      fragment.signIn(); 

Antwort

1

Sie können Bibliotheken wie EventBus verwenden, um den Code zu verknüpfen.

eine Klasse definieren, die Veranstaltung implementiert u wollen zB auszuführen: LogOutEvent.java

public static class LogOutEvent { /* Additional fields if needed */ } 

U

Ereignisse wie Abmelde von Activity.java mit folgenden Befehl veröffentlichen können
EventBus.getDefault().post(new LogOutEvent()); 

und in Fragment Sie müssen zuerst Ereignisbus

registrieren Von acitviy etwas tun, wie folgt aus:

und dann in Fragment können Sie für Veranstaltungen wie diese

@Subscribe(threadMode = ThreadMode.MAIN) 
public void onMessageEvent(LogOutEvent event) {/* Do operation here */}; 

aktualisieren abonnieren.

Beispielfragmentfragment = (ExampleFragment) getFragmentManager(). FindFragmentById (R.id.example_fragment); Fragment.();

+0

Danke für den Vorschlag, aber ich hoffte auf eine Möglichkeit, das zu reparieren, was ich bereits habe. –

+0

siehe Update am Ende – Vicky

+0

Versucht es, kein Glück. Gleicher Fehler. java.lang.NullPointerException: Versuch, die virtuelle Methode 'void com.BarTabs.fragment.Fragment3.signIn()' für eine Nullobjekt-Referenz aufzurufen –

2

Da ich keine Ahnung habe, welche Fragmente gerade laufen, nehme ich an, dass Fragment3 momentan nicht läuft.

Als erstes findFragmentById(R.id.container) wird die ID des Fragmentcontainers genommen und Sie erhalten das aktuelle Fragment, das im Fragmentcontainer ausgeführt wird.

Um das Fragment hinzuzufügen und die Funktion signIn auszuführen, versuchen Sie diesen Code unten.

Fragment3 fragment = new Fragment3(); getSupportFragmentManager().beginTransaction.replace(R.id.container,fragment).commit(); fragment.signIn(); Hier stellen Sie sicher, die ID der fragment_container id und nicht die Fragment-ID.

Verwandte Themen