किसी अन्य गतिविधि से DialogFragment पर लौटना मेरे प्रवेश एनीमेशन का पुन: उपयोग करता है

Dec 06 2020

मेरे पास एक गतिविधि (ए) है जो एक डायलॉगफ्रैगमेंट बनाता है। उस DialogFragment में, मेरे पास एक बटन है जो एक नई गतिविधि (B) बनाता है। जब मैं गतिविधि बी समाप्त करता हूं, तो यह गतिविधि ए से डायलॉगफ्रैग्मेंट प्रदर्शित करता है और यह उस कस्टम एनीमेशन का पुन: उपयोग करता है जो मैंने सेट किया था। गतिविधि ए पर लौटते समय मैं अपने संवाद को उस एनीमेशन के पुन: उपयोग से कैसे रोकूं?

यह उत्तर कुछ उपकरणों के लिए काम करता है, हालांकि यह कुछ पर पूरी खिड़की को जमा देता है (इसलिए चेक संस्करण)

@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

इस तरह से मैं अपना कस्टम डायलॉगफ्रेममेंट दर्ज / निकास एनीमेशन बना रहा हूं:

@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>

लॉगिन

<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>

लॉगिन

<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>

यहाँ DialogFragment बनाने के लिए कोड है:

https://pastebin.com/k1c6nz3p

जवाब

2 MariosP Dec 14 2020 at 17:26

आप में एनीमेशन अक्षम करना चाहिए onPause () के बजाय अपने DialogFragment की विधि onStop () विधि। कोड की सभी पंक्तियों को अभी हटा दें जो आपके पास onStop () विधि में है और कोड के नीचे की पंक्तियों के साथ onPause () जोड़ें :

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

इसे ऑनपॉज () विधि में करने से आप बिना किसी टच इवेंट को फ्रीज किए सभी विंडो एनिमेशन को निष्क्रिय कर देते हैं।

IvanGarza Dec 13 2020 at 14:03

पुनरावर्तन दृश्य हमेशा समस्याग्रस्त हो सकते हैं, खासकर यदि आप इसे प्रत्येक परिदृश्य में थोड़ा अलग करने का इरादा रखते हैं।

मैं आपको सलाह दूंगा कि या तो आप इस डायलॉग को रिसाइकिल करना बंद कर दें और इसके बजाय अपने प्रत्येक अलग-अलग मामलों के लिए एक विशिष्ट डायलॉग बनाएं , या यह कि आप अपने डायलॉग में एक झंडे को परिभाषित करें कि क्या / कब एनिमेशन का उपयोग करना है।