2012-12-17 20 views
52

मैं एक लेआउट जो एक टुकड़ा के रूप में निम्नानुसार शामिल है में जोड़ दिए जाते हैं करने के लिए कैसे:एक टुकड़ा एक एक्सएमएल लेआउट

<fragment 
     android:id="@+id/mainImagesList" 
     android:name="com.guc.project.ImagesList" 
     android:layout_width="match_parent" 
     android:layout_height="62dp" 
     android:layout_below="@+id/addimagebutton" 
     android:layout_weight="1" 
     android:paddingTop="55dp" /> 

अब, मैं इस टुकड़ा मिलता है और यह इतना डाली मैं इसे और अद्यतन फेरबदल कर सकते हैं की जरूरत है दिखाई देते हैं। ऐसा मैं किस प्रकार करूं ?!

संपादित करें: मुझे लगता है कि मैंने टुकड़ा प्राप्त करने में कामयाब रहा है, लेकिन जब मैं कुछ चर बदलता हूं, तो परिवर्तन प्रकट नहीं होते हैं!

+0

परिवर्तन दिखाई नहीं देते हैं, तो कॉल करने का प्रयास [अमान्य ()] (http://developer.android.com/reference/android/view/View.html#invalidate()) किसी भी बदलाव को फिर से प्राप्त करने के लिए आपके विचार पर। –

उत्तर

94

आप टुकड़ा उदाहरण इस प्रकार प्राप्त कर सकते हैं: टुकड़ा एक और टुकड़ा में अंतर्निहित है

getSupportFragmentManager().findFragmentById(R.id.yourFragmentId) 
1

आप टुकड़ा findFragmentById (यदि आप जानते हैं कि यह घटक में शामिल है) या findFragmentByTag द्वारा

(यदि आप अपने टैग जानते हैं) मैं जो चर को अपडेट करना चाहते पता नहीं है का उपयोग कर प्राप्त कर सकते हैं, लेकिन आप FragmentTransaction API का उपयोग करके टुकड़े को एक और टुकड़े के साथ प्रतिस्थापित कर सकते हैं।

उदाहरण के लिए http://developer.android.com/guide/components/fragments.html देखें।

+0

प्रतिस्थापन चाल काम किया था। धन्यवाद – ahmed

5

मैंने एंड्रॉइड में बिल्कुल वही किया और इंटरफेस का उपयोग करने में ऐसा करने का सबसे आसान तरीका था। मेरे पास 6 टुकड़ों के साथ एक गतिविधि थी और मुझे उनमें से केवल 3 को अपडेट करने की आवश्यकता थी।

मैं इस

final Integer numeroFragments = ((PagerAdapterOfe) mViewPager.getAdapter()).getCount(); 

    for (int i=0; i<numeroFragments; i++) { 
     Object fragment = ((PagerAdapterOfe) mViewPager.getAdapter()).getItem(i); 

     // If the fragment implement my interface, update the list 
     if (fragment instanceof IOfertaFragment){ 
     ((IOfertaFragment) fragment).actualizaListaOfertas(); 
     } 
    } 

कहाँ, PageAdapterOfe मेरी गतिविधि टुकड़े अनुकूलक का उपयोग करें। मैं अपने सभी टुकड़ों को लूप करता हूं और उन लोगों की खोज करता हूं जो मेरे इंटरफेस को लागू करते हैं, जब मुझे एक मिला, तो मैं अपने इंटरफ़ेस द्वारा परिभाषित विधि निष्पादित करता हूं और वह है!

मैं इस कोड का उपयोग उस गतिविधि के अंदर करता हूं जिसमें सभी टुकड़े होते हैं, एक प्रसारण संकेत के जवाब में, आप इसे कहां रख सकते हैं।

इंटरफ़ेस:

public interface IOfertaFragment { 

    public void actualizaListaOfertas(); 
} 
+0

परफेक्ट, एक आकर्षण की तरह काम करता है – ahmed

+0

यह काम करता है, लेकिन सुरक्षित पक्ष पर होने के लिए आपको लूपिंग के बजाय खंड टैग का उपयोग करना चाहिए। –

7

हैं, तो आप getChildFragmentManager नहीं बल्कि getFragmentManager की जरूरत है। उदाहरण के लिए, लेआउट एक्सएमएल में इस तरह टुकड़ा निर्धारित करें:

<fragment 
    android:name="com.aventlabs.ChatFragment" 
    android:id="@+id/chatfragment" 
    android:background="#ffffff" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_weight="1" 
    android:layout_marginTop="50dp" 
    android:layout_marginLeft="5dp" 
    android:layout_marginRight="5dp" /> 
संहिता में

, तो आप इस तरह टुकड़ा उदाहरण प्राप्त कर सकते हैं:

FragmentManager f = getChildFragmentManager(); 
FragmentTransaction transaction = f.beginTransaction(); 
chatFragment = f.findFragmentById(R.id.chatfragment); 

if (chatFragment != null) { 
    transaction.hide(chatFragment); 
} 
transaction.commit(); 
+1

getChildFragmentManager() ने ऐसा किया क्योंकि मैंने खंडित घोंसला किया था, धन्यवाद भाई – Mrinmoy

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^