Android - टुकड़ा लेन-देन पर कस्टम एनीमेशन नहीं चल रहा है


83

मैं समर्थन पैकेज v4 के साथ Google API 8 (Android 2.2) का उपयोग कर रहा हूं।

यह कोई त्रुटि या एनीमेशन नहीं देता है।

लेन-देन:

FragmentTransaction transaction = manager.beginTransaction();       
transaction.replace(R.id.content, myFragment);
transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
transaction.commit();

एनिमेशन:

slide_in_left.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="700"
        android:fromXDelta="-100%"
        android:toXDelta="0%" >
    </translate>
</set>

slide_out_right.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="700"
        android:fromXDelta="0%"
        android:toXDelta="100%" >
    </translate>
</set>

क्या किसी को पता है कि यहां क्या हो रहा है?


1
हनीकॉम्ब (एपीआई 11, एंड्रॉइड 3.0) तक फ्रेगमेंट पेश नहीं किए गए थे। यह समस्या हो सकती है, लेकिन मैंने सोचा होगा कि ग्रहण आपको बताएगा।
स्टीव ब्लैकवेल

6
इसलिए मैं सपोर्ट पैकेज का उपयोग कर रहा हूं।
एडहेस

जवाबों:


256

एनीमेशन सेट करने से पहले प्रबंधक मेरे लेन-देन को रोक रहा था, इसलिए यह बिना एनिमेशन (उदास लेकिन सत्य) के लेन-देन को रोक देता है, और ऐसा तब भी होता है जब मैं एनीमेशन के बाद भी लेनदेन करता हूं setCustomAnimations()

समाधान पहले एनिमेशन सेट करना है:

FragmentTransaction transaction = manager.beginTransaction();       
transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
transaction.replace(R.id.content, myFragment);
transaction.commit();

इसलिए आपको स्व
लौटती

4
transaction.something().somethingelse().replace().commit(), कई Android विधियाँ वापस आती हैं, thisताकि आप वैरिएबल को पुनः प्राप्त करने से बच सकें, लेकिन किसी तरह यहाँ एक साइड इफ़ेक्ट को उजागर setCustomAnimations()किया जा सकता है और इसे अलग से बुलाया जाना चाहिए
sherpya

44
बस ध्यान देने के लिए, "सेल्फ रिटर्न ऑब्जेक्ट ट्रिक" को "मेथड चेनिंग" कहा जाता है
Egor

उपरोक्त कॉलिंग की विधि निश्चित रूप से काम करती है। बस अपने ही प्रोजेक्ट में इसे परखा।
मावराफॉली 21

अतिरिक्त के लिए, बैक स्टैक से पॉप होने पर टुकड़े को चेतन करने के लिए, transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right, R.anim.slide_in_left, R.anim.slide_out_right);इसके बजाय उपयोग करें ।
जस्टिन

23

जैसा कि ऊपर बताया गया है, अलग-अलग कथन निश्चित रूप से काम करेंगे। लेकिन यहाँ ट्रिकsetCustomAnimation टाइप करने से पहले ट्रिक टाइप करना है। add, replaceआदि, यह नहीं है। तो, एक ही तर्क को लागू करने, method chainingभी काम करता है। जैसे।

getSupportFragmentManager()
        .beginTransaction()
        .setCustomAnimations(R.anim.a_slide_up,
                             R.anim.a_slide_down,
                             R.anim.a_slide_up,
                             R.anim.a_slide_down)
        .add(R.id.root_layout, 
             MyFrag.newInstance())
        .addToBackStack("MyFrag")
        .commit();

इसे यहां रखा जा रहा है, ताकि जो कोई पसंद करता method chainingहै उसे मददगार लगे। चीयर्स!


1
जिस तरह से आप विधि का उपयोग करने के लिए 'डॉट' ऑपरेटर का उपयोग करते हैं, मैं उससे बहुत प्रभावित हूं।
शैशव

1
@Shaishav ने यह उत्तर दो साल पहले लिखा था, इसे अपडेट करते हुए .. धन्यवाद!
हरिसिवक

7

इसे यहाँ छोड़ना क्योंकि यह सबसे लोकप्रिय प्रश्न है। मुझे एक ही समस्या थी कि खंडन लेन-देन में कोई कठिनाई नहीं है। अपराधी की विशेषता लेआउट वाले android:animateLayoutChangesसेट trueमें थी।

मुझे आशा है कि यह किसी को समाधान की तलाश में कुछ समय बचाने में मदद करता है क्योंकि विभिन्न फाइलों में नेस्टेड लेआउट होने पर यह नोटिस करना मुश्किल हो सकता है।


एनिमेशन अब काम कर रहा है लेकिन नई समस्या- यह बदल गया है एनिमेशन व्यवहार। इससे पहले यह क्षैतिज रूप से फिसल रहा है (जैसा कि अपेक्षित है)। अब कोने से विस्तार
शरद काले

0

एक और कारण अनावश्यक रूप fragmentTransaction.show()से प्रतिबद्ध होने से पहले हो सकता है । यह कुछ Android API संस्करणों पर पॉप संक्रमण नहीं दिखाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.