2011-08-03 10 views
25

जाओ मैं एक टुकड़ाटुकड़ा के कंटेनर दृश्य आईडी

transaction.add(R.id.content, fragment, null); 

का उपयोग कर जोड़ लिया है और मैं इस एक से नए टुकड़ा शुरू करने के लिए की जरूरत है। लेकिन ऐसा करने के लिए मुझे पहले खंड के कंटेनर व्यू आईडी (मेरे मामले में R.id.content) को जानने की आवश्यकता है। मैं यह कैसे प्राप्त कर सकता हूं?

मैं सिर्फ इस आईडी का उपयोग सीधे कर सकता हूं लेकिन मुझे लगता है कि खंड को माता-पिता गतिविधि के बारे में इस तरह के विवरण नहीं पता होना चाहिए। उदाहरण के लिए इस मामले में इस खंड में किसी अन्य गतिविधि में उपयोग करना असंभव होगा।

एक दूसरे से खंड "प्रारंभ" हो सकता है एक बुरा अभ्यास है और सभी टुकड़े हैंडलिंग तर्क गतिविधि से ही संभाला जाना चाहिए? लेकिन एक-दूसरे से शुरू होने वाले टुकड़ों के अच्छे अनुक्रम बनाना काफी उपयोगी लगता है (उदाहरण के लिए detalView-> moreDetailView-> evenMoreDetailView)।

उत्तर

65

आपको गतिविधि कक्षा में टुकड़ा उदाहरण mCurrentFragment है

((ViewGroup)getView().getParent()).getId(); 
+3

यह मुझे किसी भी विचार को शून्य देता है, मेरे पास मुख्य स्क्रीन है जिसमें लेआउटरेट x = (LinearLayout) ((ViewGroup) getView() कहने का प्रयास करते समय मैं लेआउट के लिए पैरेंट के रूप में उपयोग करता हूं।getParent()); फ्रैगमेंट क्लास में कहा जाता है लेकिन यह हमेशा शून्य है – AMH

+0

एक आकर्षण की तरह काम करना, मेरे घंटों को बचाने के लिए धन्यवाद आदमी –

11

डुनो अगर मैं वास्तव में आपका प्रश्न समझता हूं, लेकिन आप कंटेनर को क्रिएटिव्यू में प्राप्त करते हैं। मुझे लगता है कि आप इसे स्थानीय चर में छीन सकते हैं।

public View onCreateView(LayoutInflater inflater, 
    ViewGroup container, 
    Bundle savedInstanceState) { 
    mContainer = container; 
    ... 
} 
+0

आप इसे सही समझते हैं। मैं इसे इस तरह से कर सकता हूं लेकिन यह मुझे एक हैक की तरह लगता है। यहां कंटेनर को खंड के लिए पारित किया गया है ताकि वह इसके दृष्टिकोण को फुला सके और मुझे संदेह है कि इसे भविष्य के उपयोग के लिए संग्रहीत किया जाना चाहिए। कंटेनर व्यू आईडी प्राप्त करने का कुछ और मूल तरीका मौजूद है? –

+1

मुझे नहीं लगता कि इस विधि के साथ क्या गलत है। यदि आप दृश्य को स्टोर नहीं करना चाहते हैं, तो बस आईडी को स्टोर करें। –

5

बुला आप यह मानते हुए से कंटेनर की आईडी पहुँच सकते हैं। आप के माध्यम से

int id = mCurrentFragment.getView().getParent().getId(); 
ViewGroup vg = (ViewGroup) findViewById(id); // Fragment's container View 
+1

(यदि मैं सही ढंग से समझता हूं कि आप क्या कर रहे हैं) ऑब्जेक्ट आपको आईडी से प्राप्त हुआ ** ** वह वस्तु है जिसे आप देख रहे हैं के लिये। उन दो पंक्तियों को छोटे से प्रतिस्थापित किया जा सकता है: 'ViewGroup vg = (ViewGroup) mCurrentFragment.getView()। GetParent();' कोई भी स्थिति जहां यह आपके द्वारा किए गए कार्यों के बराबर नहीं होगी? – ToolmakerSteve

+0

Yep @ToolmakerSteve, वे हमेशा समकक्ष होते हैं। मेरे लिए यह खोजने के लिए धन्यवाद। –

8

टुकड़ा के कंटेनर देखें प्राप्त कर सकते हैं मुझे लगता है कि दृश्य तक पहुँचने के बजाय

((ViewGroup) getView().getParent()).getId() 

का उपयोग कर रहा है कि आप एक MainActivity कि एक प्रस्तुत करता है के साथ काम कर रहे हैं समझेंगे का एक और अधिक मानक तरीका सूची टुकड़ा, जो किसी आइटम पर क्लिक करने के बाद एक और सूची खंड प्रस्तुत कर सकता है, और इसी तरह। मुझे लगता है कि आपने मुख्य सूची के मुख्य दृश्य को आपके द्वारा मौजूद सूची टुकड़ों की सामग्री के साथ प्रतिस्थापित करना चुना है।

चूंकि प्रत्येक सूची खंड मुख्य गतिविधि में होस्ट किया जा रहा है, तो आप हमेशा मुख्य गतिविधि के दृश्य तक पहुंच सकते हैं।

// Inside of onListItemClick... 
FragmentManager fm = getFragmentManager(); 
Fragment fragment = new MyOtherListFragment(); 

FrameLayout contentView = (FrameLayout) getActivity().findViewById(R.id.content_view); 

fm.beginTransaction() 
     .replace(contentView.getId(), fragment) 
     .addToBackStack(null) 
     .commit(); 

उपरोक्त उदाहरण मानता है आप एक एक्सएमएल लेआउट संसाधन है कि आप MainActivity में सेट है, एक्सएमएल संसाधन R.layout.activity_main, जहां आईडी R.id.content_view के साथ एक FrameLayout है कहते हैं। यह वह दृष्टिकोण है जिसे मैंने लिया था। उदाहरण जो मैं यहां प्रस्तुत करता हूं वह एक सरल संस्करण है जिसे मैंने वास्तव में अपने ऐप में लिखा था।

संयोग से, इंटेलीजे की मेरी संस्करण (संस्करण 1.0.1) मुझे चेतावनी दी है कि

((ViewGroup) getView().getParent) 

एक NullPointerException फेंक सकता है।

+1

ठीक है, इस प्रश्न के कुछ सप्ताह बाद मुझे पता चला है कि टुकड़े टुकड़े डिजाइन प्रयोज्यता के बिंदु से परे त्रुटिपूर्ण हैं और कभी भी फ्रैगमेंट का उपयोग नहीं करते हैं। –

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