2017-03-15 10 views
8

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

public class FirstPresenter implements FirstContract.Presenter { 
    private final FirstContract.View mView; 

    public FirstPresenter(FirstContract.View view) { 
     mView = view; 
    } 

    @Override 
    public void start() { 
     Log.e(TAG, "Start"); 
    } 
} 

और यहाँ है: क्या मैं दिखाई दे रही है हर टुकड़ा रजिस्टर है कि यह स्वयं के प्रस्तोता है है, लेकिन मुझे यकीन है कि यह कितना गलत है नहीं कर रहा हूँ ... :)

तो यहाँ मेरी प्रस्तुतकर्ता है मेरा टुकड़ा:

public class FirstFragment extends Fragment implements FirstContract.View { 
    private FirstContract.Presenter mPresenter; 

@Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container 
      , Bundle savedInstanceState) { 
... 
// I register firstFragment's presenter here. 
mPresenter = new FirstPresenter(this); 
... 

तो मेरा सवाल है, क्या यह सही तरीका है? क्या मैं प्रेजेंटर को गतिविधि में बदले में फ्रैगमेंट में पंजीकृत कर सकता हूं? और यदि यह सही नहीं है, तो क्या एमवीपी को एक गतिविधि और एकाधिक टुकड़ों के साथ संभालने के लिए कुछ अच्छा उदाहरण है?

धन्यवाद दोस्तों, बीआर!

+1

एंड्रॉइड ब्लूप्रिंट रिपोजिटरी में उदाहरण कोड में, आपको 'गतिविधि' के अंदर 'प्रस्तुतकर्ता' बनाया जा रहा है, लेकिन पंजीकरण 'फ्रैगमेंट' के अंदर भी किया जाएगा। उदाहरण के लिए 'कार्यसूची एक्टिविटी' देखें: https://github.com/googlesamples/android-architecture/blob/todo-mvp/todoapp/app/src/main/java/com/example/android/architecture/blueprints/todoapp/ taskdetail/TaskDetailActivity.java - हम अपने ऐप में एमवीपी का भी उपयोग कर रहे हैं और हम पंजीकरण भी उसी तरह करते हैं। मुझे ऐसा करने में कोई समस्या नहीं दिख रही है। – Darwind

उत्तर

8

आप गूगल के नमूने (https://github.com/googlesamples/android-architecture) में देख सकते हैं, ActivitiesPresenters पैदा करते हैं। ViewsActivity और Presenters से पैरामीटर के रूप में दृश्य (Fragments) को संलग्न करें।

बाद Fragment लेन-देन के लिए प्रतिबद्ध या Fragment (देखें) राज्य Presenters बहाल बनाया है और Fragments (दृश्य) ले पाने के पैरामीटर के रूप में की तुलना में फोन विचारों का

view.setPresenter(T presenter); 

तरीकों और Presenters देखने पर पंजीकृत मिलता है।

मुझे लगता है कि PresenterFragment में एक अच्छा अभ्यास नहीं है। सबसे पहले वे अलग परत हैं। यह के लिए अवैध है चिंताओं का पृथक्करण। और दूसरा, यदि आप Fragment में प्रस्तुतकर्ता बनाते हैं, तो आप अपने प्रेजेंटर के जीवन को LifeCycle देखने के लिए बाध्य करते हैं और जब Fragment नष्ट हो जाता है और फिर से बनाया जाता है, तो आप एक नया प्रस्तुतकर्ता बनाते हैं लेकिन वे अलग-अलग परतें हैं।

मॉडल डेटा को परिभाषित एक इंटरफेस या प्रदर्शित करने के लिए अन्यथा यूजर इंटरफेस में पर काम किया है।

प्रस्तुतकर्ता मॉडल और दृश्य पर कार्य करता है। यह भंडार (मॉडल) से डेटा पुनर्प्राप्त करता है, और इसे दृश्य में प्रदर्शित करने के लिए प्रारूपित करता है।

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

तो Activity एक overall controller जो Presenters बनाता है और Views के रूप में कार्य और उन्हें कनेक्ट कर सकते हैं।

enter image description here

अगर हम अपने प्रश्न के बारे में बात करते हैं, हाँ आप प्रस्तोता टुकड़ा में रजिस्टर कर सकते हैं। लेकिन आपको प्रस्तुतियों को टुकड़ों में बनाने से बचना चाहिए जिन्हें आप एक दृश्य के रूप में उपयोग करते हैं।

लेकिन नीचे दिए गए एंड्रॉइड समुदाय में एमवीपी पैटर्न के बारे में बहुत सारे दृष्टिकोण हैं। https://plus.google.com/communities/114285790907815804707

गतिविधियां ui तत्व क्यों नहीं हैं? http://www.techyourchance.com/activities-android/

+1

विस्तृत उत्तर के लिए धन्यवाद! चूंकि आप अनुभवी डेवलपर की तरह दिखते हैं, क्या आपके पास एक गतिविधि और एकाधिक टुकड़ों के साथ समस्या को हल करने का समाधान है? – MilanNz

+2

जैसा कि मैंने अपने उत्तर में उल्लेख किया है, यदि आपको एक ही गतिविधि में कई टुकड़ों की आवश्यकता है, तो आप गतिविधि को एक नया टुकड़ा बनाने के लिए विखंडन लेनदेन कर सकते हैं, प्रस्तुतकर्ता बना सकते हैं और उन्हें कनेक्ट कर सकते हैं। लेकिन मुझे Google नमूने में इस तरह के कार्यान्वयन को नहीं देखा गया। वे 1 गतिविधि - 1 खंड लागू करते हैं। – savepopulation

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