2012-03-24 14 views
19

मैं एंड्रॉइड में फ्रैगमेंट सीखने की कोशिश कर रहा हूं और विभिन्न उदाहरणों से मैंने पाया है कि ऐसा करने के विभिन्न तरीके हैं और मैं सिर्फ कुछ सलाह लेना चाहता हूं कि सही तरीका कौन सा है, या कम से कम परिस्थितियों में एक तरीका दूसरे पर इस्तेमाल किया जाना चाहिए।एंड्रॉइड फ्रैगमेंट्स को मुझे 1 खंड का पुन: उपयोग करना चाहिए या नए उदाहरण बनाना चाहिए?

एक उदाहरण ने एक लेआउट बनाया जिसमें एक टुकड़ा और फ्रेमलाउट था। कोड में, जब सूचीफ्रेममेंट से कोई आइटम चुना जाता है तो एक नया टुकड़ा बनाया जाता है (कुछ डेटा के साथ इसे कन्स्ट्रक्टर में आवश्यक होता है) और फ्रेमलेआउट को इस नए टुकड़े के साथ बदल दिया जाता है (FragmentTransaction.replace() का उपयोग करके)।

एक और उदाहरण में एक लेआउट फ़ाइल है जो 2 टुकड़े एक तरफ घोषित करती है। अब कोड में जब उपयोगकर्ता एक टुकड़े में सूची से किसी आइटम का चयन करता है तो डेटा को अपडेट करने के लिए दूसरे खंड में एक कॉल किया जाता है (चयनित आइटम के आधार पर)।

तो मैं बस सोच रहा हूं कि इनमें से किसी भी तरीके को दूसरे पर प्राथमिकता दी जाती है या यदि कुछ परिस्थितियां हैं जहां किसी का उपयोग किया जाना चाहिए?

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

1:

 mCurCheckPosition = index; 

     if (mDualPane) { 
      // We can display everything in-place with fragments, so update 
      // the list to highlight the selected item and show the data. 
      getListView().setItemChecked(index, true); 

      // Check what fragment is currently shown, replace if needed. 
      DetailsFragment details = (DetailsFragment) 
        getFragmentManager().findFragmentById(R.id.details); 
      if (details == null || details.getShownIndex() != index) { 
       // Make new fragment to show this selection. 
       details = DetailsFragment.newInstance(index); 

       // Execute a transaction, replacing any existing fragment 
       // with this one inside the frame. 
       FragmentTransaction ft = getFragmentManager().beginTransaction(); 
       ft.replace(R.id.details, details); 
       ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
       ft.commit(); 
      } 

     } else { 
      // Otherwise we need to launch a new activity to display 
      // the dialog fragment with selected text. 
      Intent intent = new Intent(); 
      intent.setClass(getActivity(), DetailsActivity.class); 
      intent.putExtra("index", index); 
      startActivity(intent); 
     } 

2:

public void onListItemClick(ListView l, View v, int position, long id) { 
    String item = (String) getListAdapter().getItem(position); 
    DetailFragment fragment = (DetailFragment) getFragmentManager() 
      .findFragmentById(R.id.detailFragment); 
    if (fragment != null && fragment.isInLayout()) { 
     fragment.setText(item); 
    } else { 
     Intent intent = new Intent(getActivity().getApplicationContext(), 
       DetailActivity.class); 
     intent.putExtra("value", item); 
     startActivity(intent); 

    } 

} 

उत्तर

20

तो मैं बस सोच रहा हूँ यहाँ दो तरीकों मैं करने के लिए बात कर रहे थे से प्रत्येक के लिए कोड है यदि इनमें से किसी भी विधि को दूसरे पर प्राथमिकता दी जाती है या यदि कुछ परिस्थितियां हैं जहां किसी का उपयोग किया जाना चाहिए?

वास्तविक टुकड़ा (यानी, यह एक ही टुकड़ा वर्ग है) को बदलने की जरूरत नहीं है, तो मैं गतिविधि के लिए होता है, कि टुकड़ा बजाय यह (अपने परिदृश्य # 2) की जगह पर एक विधि कॉल यह मानते हुए मौजूद। रनटाइम पर यह बहुत महंगा है, और यह कोड के लिए शायद आसान है।

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

हालांकि मैं आपके # 2 कोड संरचनात्मक रूप से प्रशंसक नहीं हूं। आईएमएचओ, टुकड़े सीधे अन्य टुकड़ों के साथ बात नहीं करनी चाहिए। मेरा पसंदीदा पैटर्न टुकड़ों के लिए "अपने बुनाई तक चिपकने" के लिए है, जो अपने स्वयं के विगेट्स और मॉडलों के भीतर पूरी तरह से ध्यान केंद्रित करते हैं। यूआई के अन्य हिस्सों को प्रभावित करने वाली घटनाओं के लिए (उदा।, सूची क्लिक करें), खंड को गतिविधि को सूचित करें (उदा।, श्रोता इंटरफ़ेस के माध्यम से)। गतिविधि वह है जो जानता है कि कौन से टुकड़े आसपास होना चाहिए, क्योंकि यह वह है जिसने उन्हें पहले स्थान पर बनाया है। गतिविधि या तो अन्य टुकड़े (यदि यह मौजूद है) से बात कर सकती है, तो अन्य टुकड़ा (यदि कमरा है) बनाएं, या दूसरी गतिविधि शुरू करें। यदि आप अपना # 2 दृष्टिकोण पसंद करते हैं, तो इसका उपयोग करने के लिए आपका स्वागत है - यह वही नहीं है जो मैं आपके परिस्थिति में करता हूं।

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