Frage Android Fragment Animation wird erneut auf Orientierungsänderung wiederholt


In meiner Aktivität habe ich das Fragment mit dem folgenden Code hinzugefügt.

FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.right_to_left_in, R.anim.right_to_left_exit,R.anim.left_to_right_in,R.anim.left_to_right_exit);
DetailsFragment newFragment = DetailsFragment.newInstance();
ft.replace(R.id.details_fragment_container, newFragment, "detailFragment");
ft.commit();

Das Fragment tritt ein und aus und wird mit den Animationen richtig angezeigt. Aber wenn ich das Gerät anordne, versucht Fragment Manager, das Fragment mit den gleichen Animationen hinzuzufügen. Es scheint sehr seltsam. Ich möchte die Animation nicht, wenn der Benutzer das Gerät ausrichtet.

Ich möchte nicht hinzufügen onConfigChanges='orientation' in manifest, da ich das Layout des Fragments bei der Ausrichtung ändern möchte.


7
2018-06-19 14:22


Ursprung


Antworten:


Das konnte ich nur vermeiden nicht behalten die Fragment-Instanz. In deinem DetailsFragmentist es onCreate Methode verwenden setRetainInstance(false); 


3
2017-07-13 09:37



Bei einer Änderung der Ausrichtung fügt Android das vorhandene Fragment automatisch an eine Aktivität an. Sie müssen es also nicht manuell tun. Sie können die Variable savedInstanceState in überprüfen onCreate Methode der Aktivität für null und ersetzen Sie ein Fragment mit Animation nur für den Fall, dass es null ist:

if (savedInstanceState == null) {
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.setCustomAnimations(R.anim.right_to_left_in, R.anim.right_to_left_exit,R.anim.left_to_right_in,R.anim.left_to_right_exit);
    DetailsFragment newFragment = DetailsFragment.newInstance();
    ft.replace(R.id.details_fragment_container, newFragment, "detailFragment");
    ft.commit();
}

0
2018-06-19 14:40