2016-09-21 7 views
9

का उपयोग कर मैं दो टुकड़ा वर्ग SessionTab और BillingTab नामित किया है और मैंकैसे वर्ग के नाम के बजाय सूचकांक

SessionTab sessionTab = (SessionTab) getSupportFragmentManager().getFragments().get(1); 

लेकिन कभी कभी उन वर्गों के लिए सूचकांक उलट कर रहे हैं का उपयोग करने वालों वर्ग के उदाहरण बनाने के लिए कोशिश कर रहा हूँ और टुकड़ा वर्ग का दृष्टांत को तो यह ClassCastException

कैसे मैं सूचकांक या यकीन है कि उन लोगों के वर्ग के सूचकांक में एक ही हर रहता है कि तो यह कारण नहीं है बनाने के लिए किसी भी तरह से करने के बजाय वर्ग के नाम को पारित करके उन टुकड़ा वर्ग के उदाहरण मिल सकता है का कारण बनता है ClassCastException

+0

यदि आपको अभी भी सहायता चाहिए तो अपने शेष कोड को पोस्ट करें। –

उत्तर

6

इस विधियों में से एक का उपयोग करें: findFragmentById() और findFragmentByTag() विधियां।

संदर्भ: https://developer.android.com/reference/android/app/FragmentManager.html#findFragmentById(int)

अद्यतन:

ClassCastException शुरू हो जाती है आप एक दूसरे के लिए उचित वर्गों कास्टिंग नहीं कर रहे हैं जब। आपके मामले में, आपका FragmentManagerSessionTab से भिन्न खंड लौटा रहा है, इसलिए अपवाद फेंक दिया गया है।

यदि आप findFragmentById() या findFragmentByTag() का उपयोग करते हैं, तो यह आपके द्वारा इच्छित इच्छित टुकड़े को वापस कर देगा, और अपवाद नहीं फेंक दिया जाएगा।

4

एक टुकड़ा के लिए 'टैग' को परिभाषित करें, जबकि यह

getFragmentManager().beginTransaction().add(new Fragment(),"your_tag"); 

की तरह जोड़ने और जब संदर्भित यह

getFragmentManager().findFragmentByTag("your_tag"); 

का उपयोग ज्यादातर मामलों में, आप अपने टैग के रूप में YourFragment.class.getSimpleName() उपयोग करना चाहते हैं।

+0

मुझे यकीन नहीं है कि इसे कैसे कार्यान्वित किया जाए। मैं इस –

+0

का उपयोग करके अपनी कक्षा को तुरंत चालू नहीं कर पा रहा हूं, मुझे लगता है कि यह करने का यह सबसे अच्छा और साफ तरीका है। @ आकाश कुमार जहां आप अटक गए हैं? – codewing

+0

@ZorawarSachdev 'YourFragment.class।getSimpleName() 'टुकड़े पैरेंट गतिविधि कक्षा का नाम वर्तमान खंड वर्ग नाम –

1

सबसे पहले, अगर आपको किसी भी टुकड़े के लिए उस उदाहरण को समझना चाहिए तो आप जावा क्लास एपीआई से ले सकते हैं। नीचे की तरह:

Class<?> class = Class.forName("example.package.BillingFragment"); 
Constructor<?> cons = class.getConstructor(BillingFragment.class); 
BillingFragment object = (BillingFragment) cons.newInstance(); 

कोड उदाहरण दिखाएं, जावा में किसी भी वर्ग से इंस्टेंस कैसे प्राप्त करें। लेकिन आप कुछ और चीजों से बात कर रहे हैं। अगर मैं सही समझता हूं, तो आप FragmentManager से फ्रैगमेंट प्राप्त करना चाहते हैं।

यदि आप पहले ही फ्रैगमेंट पहले ही परिभाषित कर चुके हैं, तो आप इसे कर सकते हैं! उदाहरण के लिए, आपके पास बेस एप्लिकेशन प्रवाह है, और फिर आप फ्रेगमेंट जोड़ना चाहते हैं। यदि ढेर में टुकड़े हैं तो आप FragmentManager की जांच कर सकते हैं। लेकिन खाली ढेर के मामले में, आप उन्हें मैन्युअल रूप से जोड़ना चाहिए:

String billingFragmentTag = BillingFragment.class.getSimpleName(); 

...... 

if (getFragmentManager.findFragmentByTag(billingFragmentTag) == null) { 
    BillingFragment fragment = new BillingFragment(); 
    String billingFragmentTag = BillingFragment.class.getSimpleName(); 

    FragmentTransaction fragTrans = getFragmentManager().beginTransaction(); 
      fragTrans.add(fragment, billingFragmentTag).commit(); 
} 

...... 

तो इस के बाद, आप ढेर में अपने टुकड़ा वहाँ अगर जाँच करें और यह सक्रिय उदाहरण हुक कर सकते हैं। यह टुकड़ों का उपयोग करने के लिए सही और मानक प्रवाह है।

...... 

if (getFragmentManager.findFragmentByTag(billingFragmentTag) != null) { 
    BillingFragment fragment = getFragmentManager.findFragmentByTag(billingFragmentTag); 
    String billingFragmentTag = BillingFragment.class.getSimpleName(); 

    FragmentTransaction fragTrans = getFragmentManager().beginTransaction(); 
      fragTrans.add(fragment, billingFragmentTag).commit(); 
} 

.... 

आपका स्वागत है!

+0

नहीं दिया है क्यों आप बिलिंगिंग ऑब्जेक्ट = नया बिलिंग फ़्रेगमेंट() नहीं करते हैं; – codewing

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