Ich habe eine Hostaktivität und zwei Fragmente. Ich habe OnBackStackChangeListener
für die Aktivität implementiert, so dass die Zurück-Schaltfläche auf der Aktionsleiste konsistentes Verhalten bietet. Ich verstehe, dass bei einer Änderung der Bildschirmausrichtung eine Aktivität zerstört und neu erstellt wird, aber gibt es eine Möglichkeit, zu verhindern, dass doppelte Fragmente als Ergebnis von Änderungen an der Installation in den Backstack eingefügt werden, ohne onConfigurationChanged
zu überschreiben? Denn jetzt blättert der Zurück-Button durch doppelte Fragmente.So verhindern Sie, dass doppelte Fragmente zum Backstack hinzugefügt werden, wenn sich die Bildschirmausrichtung ändert
MyActivity:
public class DepartmentListActivity extends AppCompatActivity implements FragmentManager.OnBackStackChangedListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
overridePendingTransition(0, 0);
setContentView(R.layout.activity_department_list);
getSupportFragmentManager().addOnBackStackChangedListener(this);
DepartmentListFragment fragment = DepartmentListFragment.newInstance();
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.department_list_container, fragment)
.addToBackStack("list")
.commit();
shouldDisplayHomeUp();
}
@Override
public void onBackStackChanged() {
shouldDisplayHomeUp();
}
public void shouldDisplayHomeUp(){
//Enable Up button only if there are entries in the back stack
boolean canback = getSupportFragmentManager().getBackStackEntryCount()>0;
getSupportActionBar().setDisplayHomeAsUpEnabled(canback);
}
@Override
public boolean onSupportNavigateUp() {
//This method is called when the up button is pressed. Just the pop back stack.
if(getSupportFragmentManager().getBackStackEntryCount()>1){
getSupportFragmentManager().popBackStack();
}else{
startActivity(new Intent(this, MainMenuActivity.class));
}
return true;
}
}
FromListAdapter:
Fragment fragment = DepartmentOverviewFragment.newInstance();
((DepartmentListActivity) context).
getSupportFragmentManager().
beginTransaction().
replace(R.id.department_list_container, fragment).addToBackStack("overview").commit();
Im Wechsel von Fragmenten von einem BaseAdapter, so kann ich den savedInstanceState nicht überprüfen – BiGGZ