2011-10-17 10 views
5

मैं अन्य टुकड़ों को लॉन्च करने वाले टुकड़ों को संभालने के सर्वोत्तम तरीके पर कुछ सलाह ढूंढ रहा हूं।वर्तमान खंड के रूप में एक ही स्थान में नए टुकड़े को कैसे लोड करें

मैं एक ऐप को परिवर्तित कर रहा हूं जिसे मैंने अधिक गतिविधि आधारित दृष्टिकोण का उपयोग करके लिखना शुरू कर दिया है और तब से इसे फ्रैगमेंट्स का उपयोग करने के लिए आगे बढ़ना शुरू कर दिया है। मेरे पास कुछ टुकड़े हैं जो एक नई गतिविधि लॉन्च करते थे और मैं उन्हें उसी प्रारूप में अन्य टुकड़ों को लॉन्च करने के लिए आगे बढ़ाना चाहता हूं जो वर्तमान टुकड़ा रह रहे हैं।

उदाहरण के लिए - मेरे पास एक गतिविधि है जिसमें एक वेबव्यू है जो आंतरिक जेएस-> जावा इंटरैक्शन को संभालने के लिए WebViewClient का उपयोग करता है। मेरे WebViewClient अन्य गतिविधियां, जो मैं के साथ क्या करने के लिए इस्तेमाल शुरू कर सकते हैं:

i = new Intent(context, GoogleMapActivity.class); 
startActivity(i); 

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

तो ... क्या एक टुकड़ा है, अनिवार्य रूप से वर्तमान फ्रैगमेंट के समान स्थान पर लोड करने के लिए एक नया टुकड़ा बता रहा है या गतिविधि के साथ कुछ बातचीत करने की आवश्यकता है?

** संपादित करें **

को देखते हुए वहाँ कुछ अलग लेआउट जो इस्तेमाल किया जा सकता है, मैं हमेशा नहीं पता है कि जो आईडी मैं में टुकड़ा डाल करने के लिए लक्षित करना चाहिए - इसलिए मैं अगर पता करने की जरूरत आईडी को जानने के बिना ऐसा करने का एक तरीका है (उदाहरण के लिए replace विधि में)।

+0

देखो। http://stackoverflow.com/questions/7790945/how-can-i-use-fragmentmanager-to-display-fragment-abc-in-a-framelayout/7791116#7791116 –

उत्तर

5
getFragmentManager().beginTransaction() 
    .replace(((ViewGroup) getView().getParent()).getId(), fragment) 
    .addToBackStack(null) 
    .commit(); 

यह वांछित टुकड़े के साथ पैरेंट कंटेनर को प्रतिस्थापित करना चाहिए।

0

यह FragementManager.replace() के माध्यम से किया जा सकता है। documentation for Fragment पर विशेष रूप से देखें और विशेष रूप से "लेआउट" अनुभाग में लंबा उदाहरण देखें।

+0

यह देखते हुए कि कुछ अलग-अलग लेआउट हैं जो कर सकते हैं इस्तेमाल किया जाना चाहिए, मुझे हमेशा यह नहीं पता कि मुझे किस टुकड़े को टुकड़ा लगाने के लिए लक्षित किया जाना चाहिए - इसलिए मुझे यह जानने की जरूरत है कि आईडी को जानने के बिना ऐसा करने का कोई तरीका है या नहीं। या मुझे किस दृष्टिकोण का उपयोग करना चाहिए - यानी मुझे एक ही आईडी के साथ सभी टुकड़ों का नाम देना चाहिए? – Martyn

+1

आप टैग के साथ टुकड़ा भी प्राप्त कर सकते हैं। उसके बाद आईडी के बजाय प्रतिस्थापन में, आप पहले तर्क को खंड के रूप में पारित कर सकते हैं। –

-1

आप जोड़ना टुकड़ा नहीं बल्कि इसे बदलना चाहते हैं, का उपयोग करें: इस सवाल पर

getFragmentManager().beginTransaction().add(R.id.fragment_container, new Fragment()).commit(); 
संबंधित मुद्दे