2016-04-26 13 views
0

Ich habe eine NavigationViewer Aktivität, die 3 Fragmente hat. Ich möchte, dass jedes Mal, wenn der Benutzer ein Element aus NavigationViewer gleitenden Menüelementen auswählt, die App ein neues Fragmentobjekt der ausgewählten Art transaktioniert. während esDie NavigationViewer-Menüelemente behandeln Klicken Sie auf

MyFragment myFragment = new MyFragment(); 
fragmentTransaction.replace(R.id.RR, myFragment , "nav_MyFragment ").commit(); 

Aber dies führt zu einem Problem, dass, wenn der Benutzer „MyFragment“ aus dem Menü ausgewählt:

für Beispiel Ich habe einen NavigationViewer Menüpunkt namens „MyFragment“ So an diesem Punkt diesen Kodex Ich versuche, ist aktiv [für Benutzer] es wird ein neues Objekt erstellt. und ich möchte dieses neue Objekt nur erstellen, wenn ich von einem Fragment zu einem anderen übertrage.

Irgendwelche Vorschläge?

Edit: das Fragment von Tag abrufen und dann, wenn isVisble() oder wenn isAdded() Überprüfung gibt null Ausnahme

Antwort

1

Sie können eine Fragmentvariable beibehalten und Ihr aktives Fragment dort zuweisen. Überprüfen Sie dann den getClassName(). Wenn es sich bei dem angeklickte um denselben handelt, den Sie gerade anzeigen, laden Sie keinen neuen.

Ich werde den Code aus this App verwenden, die ich in GitHub habe.

dann in Ihrer Aktivität deklarieren eine Fragment Variable wie folgt aus:

Fragment active; 

in Ihrem onOptionsItemSelected() -Methode, müssen Sie gedrückt, um die Prüfung für das Element zu tun.

Wenn Sie Ihren Code in Github haben, damit ich einen Blick darauf werfen kann, wäre es besser. Hoffe es hilft!

+0

Könnten Sie bitte mehr mit Code erklären? Ich bin irgendwie neu in Android –

+1

Großartig, Das ist wirklich eine magische Lösung, Vielen Dank –

0

U Fragment Instanz in Backstack

getSupportedFragmentManager.addToBackStack (fragment.gettag)

+0

Sorry, könnte u mehr plz –

+0

I edited meine Antwort, einen Blick erklären –

0

hinzufügen müssen Ich nehme an, Sie können die tatsächlichen Artikel klickt erkennen, also was ich mache, ist dies:

private static final String TAG_FRAGMENT_SOME_NAME = "something"; 

mFragmentManager = getSupportFragmentManager(); // or getFragmentManager() if not using support library 
mFragmentTransaction = mFragmentManager.beginTransaction(); 
Fragment myFragment = mFragmentManager.findFragmentByTag(TAG_FRAGMENT_SOME_NAME); 
if (myFragment == null) { 
    myFragment = MyFragment.newInstance(); 
} 
mFragmentTransaction.replace(R.id.RR, myFragment, TAG_FRAGMENT_SOME_NAME).commit(); 
+0

Kann Methode 'newInstance()' Hinweis MyFragment erstreckt android.app.Fragment –

+0

newInstance() ist eine Methode, die Sie selbst schreiben nicht lösen, um den leeren Standardkonstruktor nicht zu verwenden. [Überprüfen Sie diese Antwort] (http://stackoverflow.com/a/9245510/3764592) für einige Vorteile, wie man es macht/Vorteile. – CounterFlame

+0

Ja, ich habe es einfach geschrieben, aber das hat mein Problem nicht gelöst, weil es die Wiederherstellung von 'MyFragment' verhindern wollte, wenn es von [user] gesehen wurde, aber es verhinderte auch die Wiederherstellung, wenn es von einem anderen Fragment zu' MyFragment' ging und ich muss es neu erstellen, wenn das passiert –

Verwandte Themen