Kembali ke DialogFragment dari Activity lain menggunakan kembali animasi enter saya
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
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.
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.