2011-06-15 17 views
6

टैबलेट पर हमारे पास दो टुकड़े (एक ही डेटा के दो अलग-अलग विचार) हैं जो एक दूसरे के बगल में बैठते हैं। मोबाइल उपकरणों पर हम एक बटन के धक्का पर इन दो टुकड़ों के बीच स्विच करना चाहते हैं। मोबाइल लेआउट इस तरह दिखता है:एकल गतिविधि में फ्रैगमेंट्स को स्वैपिंग?

FragmentManager fragmentManager = getSupportFragmentManager(); 
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
fragmentTransaction.replace(R.id.container, new FragB()); 
fragmentTransaction.commit(); 

... लेकिन मैं हमेशा देख सकते हैं:

<RelativeLayout> 
    <fragment id="container" name="fragA"/> 
    <ImageButton onClick="swapFragments" /> 
</RelativeLayout> 

गतिविधि के swapFragments(View) विधि में, मैं FragmentManager उपयोग करने के लिए बदलने के लिए fragAfragB साथ प्रयास कर रहा हूँ fragAfragB के पारदर्शी हिस्सों के माध्यम से, मुझे विश्वास है कि यह fragBfragA के शीर्ष पर रख रहा है, इसे प्रतिस्थापित नहीं कर रहा है।

मैं hide(Fragment) और लेनदेन में समान तरीकों का उपयोग करने का मार्ग शुरू कर रहा हूं, लेकिन ऐसा करने का सही तरीका नहीं दिखता है।

इन टुकड़ों को सही तरीके से स्वैप करने के तरीके पर कोई सुझाव?

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

if(TABLET) { 
    addFragmentA(); 
    addFragmentB(); 
} else { 
    addFragmentA(); 
} 
+0

क्या आपको इस समस्या का कोई समाधान मिला? –

उत्तर

0

मेरे लिए ठीक लग रहा है, मैं कुछ इसी तरह कर रहा हूँ हालांकि मैं से मेरी प्रारंभिक टुकड़ा जोड़ रहा गतिविधि यह लेआउट में यह संदर्भित द्वारा लोड होने के बजाय add का उपयोग कर रहे एक बग हो सकता है FYI करें मैं संगतता पुस्तकालय का उपयोग कर रहा

कोशिश कर रहा लायक हो सकता है:।।।

1) करने के लिए लेन-देन में जोड़ें बैक स्टैक यह देखने के लिए कि क्या इससे कोई फर्क पड़ता है, ऐसा लगता है कि आप वैसे भी कार्यक्षमता चाहते हैं।

2) अपने टुकड़े को एक आईडी या टैग लेआउट में दें, उसके बाद remove और add fragB को करने के लिए इसका उपयोग करें।

3) अपने fragA को कोड से लोड करने का प्रयास करें और देखें कि इससे कोई फर्क पड़ता है या नहीं।

0

अच्छी तरह से, सबसे पहले आप खंड बी को तुरंत चालू करने के लिए newInstance() फैक्टरी विधि का उपयोग करने का प्रयास कर सकते हैं और न केवल नए FragB()। हालांकि, मुझे लगता है कि यह समस्या नहीं है।

क्या आप बस एक्सएमएल लेआउट में टुकड़े टैग का उपयोग करने की कोशिश नहीं कर सकते?

<RelativeLayout> 
    <Linear/FrameLayout id="container" name="fragA"/> 
    <ImageButton onClick="swapFragments" /> 
</RelativeLayout> 

तो एक फ्रेम या LinearLayout आप के लिए कंटेनर टुकड़ा के रूप में की तरह इस्तेमाल करते हैं और टुकड़ा से onCreateView कॉलबैक में यह बढ़: बस कुछ इस तरह से करते हैं। शायद यह मदद करता है, मुझे बताओ।

चीयर्स!

0

जहाँ तक मैं देख सकता हूं कि आप पिछले खंड को छुपा/अलग नहीं कर रहे हैं, इसलिए दोनों प्रदर्शित होंगे।आप कुछ इस तरह लागू कर सकते हैं:

 if (mFragment != null) { 
      ft = mActivity.getSupportFragmentManager().beginTransaction(); 
      ft.hide(mFragment);     
      ft.detach(mFragment); 
      ft.commitAllowingStateLoss(); 
     } 
3

एक्सएमएल में और कोड में बनाया टुकड़े मिश्रण मत करो - बुरी चीजें नहीं होगा। लेआउट में एक कंटेनर दृश्य रखें, फिर इसमें टुकड़े जोड़ें/बदलें (इसके अंदर पहला खंड नहीं है)।

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