Kembali ke DialogFragment dari Activity lain menggunakan kembali animasi enter saya

Dec 06 2020

Saya memiliki Aktivitas (A) yang membuat DialogFragment. Dalam DialogFragment itu, saya memiliki tombol yang membuat Aktivitas baru (B). Ketika saya menyelesaikan Aktivitas B, ini akan menampilkan DialogFragment dari Aktivitas A dan menggunakan kembali animasi kustom yang saya setel. Bagaimana cara mencegah DialogFragment saya menggunakan kembali animasi itu saat kembali ke Aktivitas A?

Jawaban ini berfungsi untuk beberapa perangkat, namun itu membekukan seluruh jendela pada beberapa (karenanya versi cek)

@Override
public void onStop() {
    super.onStop();
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.P) {
        getDialog().getWindow().setWindowAnimations(-1);
    }
}

https://stackoverflow.com/a/64454784/11110509

Beginilah cara saya membuat animasi masuk / keluar DialogFragment kustom saya:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {        
    final Dialog dialog = super.onCreateDialog(savedInstanceState);
    dialog.getWindow().getAttributes().windowAnimations = R.style.FragmentDialogAnim;
    return dialog;
}
<style name="FragmentDialogAnim">
    <item name="android:windowEnterAnimation">@anim/loginactivity_left_to_right</item>
    <item name="android:windowExitAnimation">@anim/loginactivity_right_to_left</item>
</style>

loginactivity_left_to_right:

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <translate android:fromXDelta="-100%" android:toXDelta="0%"
        android:fromYDelta="0%" android:toYDelta="0%"
        android:duration="700"/>
</set>

loginactivity_right_to_left:

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <translate
        android:fromXDelta="0%" android:toXDelta="-100%"
        android:fromYDelta="0%" android:toYDelta="0%"
        android:duration="700" />
</set>

Berikut kode untuk membuat DialogFragment:

https://pastebin.com/k1c6nz3p

Jawaban

2 MariosP Dec 14 2020 at 17:26

Anda harus menonaktifkan animasi dalam metode onPause () dari DialogFragment Anda, bukan metode onStop () . Hapus saja semua baris kode yang saat ini Anda miliki di metode onStop () dan tambahkan onPause () dengan baris kode di bawah ini:

@Override
public void onPause() {
  super.onPause();
  if(getDialog()!=null)
    getDialog().getWindow().setWindowAnimations(-1);
 }

Dengan melakukannya dalam metode onPause (), Anda menonaktifkan semua animasi jendela tanpa juga membekukan peristiwa sentuh.

IvanGarza Dec 13 2020 at 14:03

Tampilan Daur Ulang selalu dapat menjadi masalah terutama jika Anda bermaksud membuatnya sedikit berbeda di setiap skenario.

Saya akan merekomendasikan agar Anda berhenti mendaur ulang Dialog ini dan sebaliknya membuat Dialog khusus untuk setiap kasus Anda yang berbeda , atau Anda cukup meneruskan sebuah bendera ke dalam Dialog Anda dengan menentukan apa / kapan menggunakan animasi.