2013-05-14 6 views
7

यदि यह मदद करता है, क्या मैं चाहता हूँ कि इस google tutorialलेन-देन

में किया जाता है लेकिन वहाँ एक टुकड़ा संक्रमण से पहले बनाई गई है के समान है। अगर मैं ऐसा करता हूं तो संक्रमण ठीक काम करता है; लेकिन मैं इस दृष्टिकोण

=====

उपयोग नहीं कर सकते एपीआई के लक्ष्य 7+ मैं सिर्फ एक टुकड़ा पूरे स्क्रीन में दिखाई दे रहा है करने के लिए कोशिश कर रहा हूँ और एक बटन (एक तैयार बटन का उपयोग कर, एक साथ ऑन टच इवेंट) फिर एक दूसरे खंड और उपाध्यक्ष के लिए वैकल्पिक।

लेकिन जब मैं दूसरे खंड के साथ पहले खंड को प्रतिस्थापित करता हूं, या अगर मैं खंड का उपयोग करता हूं तो ट्रांसमिशन। शो और खंडमेंट ट्रान्सक्शन .इड; रिक्त स्क्रीन पाने से पहले मैं दो बार स्विच कर सकता हूं। मैं बैकस्टैक पर नहीं चाहता हूं।

DiceTable diceTable = new DiceTable(); 
Logger logger = new Logger(); 
fragmentTransaction.add(diceTable, DICETABLE_TAG); 
fragmentTransaction.add(logger, LOGGER_TAG); 
fragmentTransaction.add(R.id.fragment_container, logger); 
fragmentTransaction.add(R.id.fragment_container, diceTable); 

फिर एक पद्धति पर (टुकड़े से कहा जाता है) मैं स्विच करना:

मैं MainActivity के onCreate में टुकड़े बनाने रहा

Logger logger = (Logger)fragmentManager.findFragmentByTag(LOGGER_TAG); 
    DiceTable diceTable = (DiceTable)fragmentManager.findFragmentByTag(DICETABLE_TAG); 

    if (diceTable.isVisible()) { 
     fragmentTransaction.replace(R.id.fragment_container, logger); 

     fragmentTransaction.commit(); 
     fragmentTransaction.hide(diceTable); 
     fragmentTransaction.show(logger); 
    } 
    else if (logger.isVisible()) { 
     fragmentTransaction.replace(R.id.fragment_container, diceTable); 

     fragmentTransaction.commit(); 
     fragmentTransaction.hide(logger); 
     fragmentTransaction.show(diceTable); 
    } 

यह नहीं है मैं इसे कैसे करना चाहिए ?

खाली स्क्रीन जब टुकड़े

जगह

उत्तर

6

कोशिश है कि रास्ते में टुकड़े प्रारंभ करने में:

private void initFragments() { 
    mDiceTable = new DiceTable(); 
    mLogger = new Logger(); 
    isDiceTableVisible = true; 

    FragmentManager fm = getSupportFragmentManager(); 
    FragmentTransaction ft = fm.beginTransaction(); 
    ft.add(R.id.fragment_container, mDiceTable); 
    ft.add(R.id.fragment_container, mLogger); 
    ft.hide(mLogger); 
    ft.commit(); 
} 

और फिर है कि रास्ते में उन दोनों के बीच फ्लिप:

private void flipFragments() { 
     FragmentManager fm = getSupportFragmentManager(); 
     FragmentTransaction ft = fm.beginTransaction(); 
     if (isDiceTableVisible) { 
      ft.hide(mDiceTable); 
      ft.show(mLogger); 
     } else { 
      ft.hide(mLogger); 
      ft.show(mDiceTable); 
     } 
     ft.commit(); 
     isDiceTableVisible = !isDiceTableVisible; 
    } 
1

आप जो टुकड़ा दिखाया गया है बदलते के दो अलग अलग तरीकों के संयोजन कर रहे हैं:

  • कॉलिंग replace() एक अलग टुकड़ा
  • hide() कॉलिंग के साथ कंटेनर की सामग्री को बदलने के लिए एक टुकड़ा हटाने के लिए, फिर एक और टुकड़ा दिखाने के लिए show() पर कॉल करें।

एक विधि चुनें और इसके साथ चिपके रहें। बिल्डिंग फ्लेक्सिबल यूआई गाइड केवल replace() विधि का उपयोग करता है, इसलिए मैं आपकी सभी कॉल show() और hide() पर निकालने का प्रयास करके शुरू करूंगा।

Android Fragments: When to use hide/show or add/remove/replace? को त्वरित सारांश के लिए भी देखें जब यह प्रतिस्थापन के बजाय छुपा/शो का उपयोग करने के लिए फायदेमंद हो सकता है।

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