2016-08-16 10 views
-1

Ich habe eine Aktivität, die einen ViewPager enthält, der 5 Fragmente enthält, und ein unteres Layout mit einer Schaltfläche, die zwischen Ansichtsseiten wechseln kann. Jedes dieser Fragmente kann jedoch ein neues Fragment I öffnen ist ersetzt Fragmente im MainActivity wie die folgenden:Verwenden von onBackPressed mit sichtbarem Fragment

FragmentManager fragmentManager = getSupportFragmentManager(); 

Fragment placeDetailsFragment = new PlaceDetailsFragment(); 
fragmentManager.beginTransaction().setCustomAnimations(R.anim.right_in, R.anim.left_out, R.anim.left_in, R.anim.right_out).replace(rootViewID, placeDetailsFragment, fragmentTag.getKey()).addToBackStack(fragmentTag.getKey()).commit(); 

rootViewId wo die ID der Wurzel in Layout der Seite ist.

die Idee ist, dass ich von Seite 1 in dem viewpager 1 und 2 von Seite 2 bis Fragment Fragmente eingeben .. etc ..

Ich möchte in der Lage sein, wenn ich die Hardware-Zurück-Taste in Fragmente drücken 1, um zurück zu Seite 1 und wenn ich in Fragment 2 bin, um zurück zu Seite 2, aber die Standardeinstellung onBackPressed Verhalten nur das letzte Fragment zum Stapel hinzugefügt, egal welche sichtbar ist, wenn ich also Fragment 1 dann Fragment 2 öffnen dann komme ich zurück zu Seite 1 von den unteren Ansichten in der oben genannten Aktivität und drücke zurück, es knallt Fragment 2, wenn es Fragment 1 knacken sollte, weil es momentan sichtbar ist.

wie kann ich das lösen?

+0

Sie müssen möglicherweise den onBackStackChangedListener implementieren und dort Ihre eigene Logik hinzufügen. –

+0

@AndreiT können Sie mir bitte ein Beispiel oder einen Link zur Verfügung stellen? – EyadMhanna

+0

Können Sie Ihre Situation besser erklären? Es ist schwer zu verstehen – BlueMango

Antwort

0

Speichern Sie das letzte Fragment:

Fragment lastFrag; 
FragmentManager fragmentManager = getSupportFragmentManager(); 

Fragment placeDetailsFragment = new PlaceDetailsFragment(); 
fragmentManager.beginTransaction().setCustomAnimations(R.anim.right_in, R.anim.left_out, R.anim.left_in, R.anim.right_out).replace(rootViewID, placeDetailsFragment, fragmentTag.getKey()).addToBackStack(fragmentTag.getKey()).commit(); 

lastFrag = placeDetailsFragment; 

Aufschalten onBackPressed das gespeicherte Fragment Pop:

@Override 
public void onBackPressed() { 

    FragmentManager fragmentManager = getSupportFragmentManager(); 

    fragmentManager.beginTransaction().setCustomAnimations(R.anim.right_in, R.anim.left_out, R.anim.left_in, R.anim.right_out) 
     .replace(rootViewID, lastFrag, fragmentTag.getKey()).addToBackStack(fragmentTag.getKey()).commit(); 

} 

Hinweis lastFrag statt placeDetailsFragment in .replace innerhalb onBackPressed()

+0

das ist Reimplementierung des Standard-PopBackStack-Verhaltens, das das letzte Fragment, das nicht die derzeit sichtbar, dass ich brauche :) – EyadMhanna