2015-05-19 4 views
12

मुझे एंड्रॉइड पर एमवीपी का उपयोग करके राज्य को बचाने के बारे में कुछ संदेह हैं। मैंने अपने टुकड़े/गतिविधियों को विचारों के रूप में परिभाषित किया और फिर संबंधित प्रस्तुतकर्ताओं को लागू किया।एमवीपी एंड्रॉइड - दृश्य स्थिति को कहां से सहेजना है?

मेरे उदाहरण सरल है:

मैं कुछ चेक बॉक्स और स्पिनरों के साथ एक गतिविधि है। यदि एंड्रॉइड सिस्टम द्वारा गतिविधि नष्ट हो जाती है और फिर पुन: बनाई जाती है, तो मुझे इन स्पिनरों और चेकबॉक्स कहां से बचाया जाना चाहिए? दृश्य पर? प्रस्तुतकर्ता पर?

यदि दृश्य पर, क्या मेरे पास दृश्य या प्रस्तुतकर्ता पर पुनर्स्थापना तर्क होना चाहिए?

धन्यवाद!

उत्तर

2

एमवीपी के मामले में, मॉडल है जो दृश्य की स्थिति को रखने का प्रभारी है।

उदाहरण के लिए, आप मॉडल में आप की श्रेणियाँ किसी सरणी के साथ एक पोस्ट इकाई है। आपके विचार में आपके पास प्रत्येक श्रेणी के लिए एक चेकबॉक्स है, और प्रत्येक चेक/अनचेक कार्रवाई में आप पोस्ट के श्रेणी सरणी से ऑब्जेक्ट्स को जोड़/हटाते हैं। इसलिए यह उचित जाँच/अनियंत्रित विशेषता सेट कर सकते हैं

एक बार गतिविधि पुनर्स्थापित किया जाता है, देखें आदेश पता लगाने के लिए में पोस्ट केश्रेणी सरणी के लिए पूछना चाहिए जो चयनित और जो कर रहे हैं, नहीं कर रहे हैं।

यहाँ इसके बारे में एक बहुत अच्छी पोस्ट है: http://fernandocejas.com/2014/09/03/architecting-android-the-clean-way/

+0

मैं समझता हूं, लेकिन मेरा उदाहरण सृजन का एक रूप है। तो मेरा मॉडल श्रेणियों के साथ एक पोस्ट हो सकता है। समस्या यह है कि मैं पोस्ट ऑब्जेक्ट को कभी भी सहेजता नहीं हूं। लक्ष्य एक पोस्ट ऑब्जेक्ट बनाना और वेब अनुरोध करने के लिए इसका उपयोग करना है। तो, मुझे लगता है कि मुझे ऐसा करने का एकमात्र तरीका दृश्य में स्टोर करना है और फिर दृश्य की स्थिति को फिर से बनाना है। क्या मै गलत हु? @mmark –

+1

@ FábioCarballo अगर मैं एमवीपी के लक्ष्य को गलत नहीं समझता, तो आपको पोस्ट ऑब्जेक्ट को सहेजने की आवश्यकता नहीं होगी ("सहेजें" से मुझे लगता है कि आपका मतलब स्थानीय डीबी या साझा किए गए संदर्भों जैसा है)। प्रेजेंटर + मॉडल वह है जो दृश्य परिवर्तन में पूरे (स्मृति में) जारी रखना चाहिए – mmark

0

प्रस्तुतकर्ता मॉडल और देखें बीच एक अंतरफलक है और किसी भी राज्य को बचाने के लिए कोई जिम्मेदारी नहीं लेना चाहिए। मॉडल या व्यू हैंडल स्थिति को देने के लिए यह अधिक समझ में आता है:

  1. मॉडल। प्रेजेंटर गतिविधि प्रारंभ के दौरान मॉडल डेटा के साथ दृश्य को पॉप्युलेट करने के लिए ज़िम्मेदार है और सभी तुरंत मॉडल पर इंटरैक्शन देखें। मॉडल हमेशा अद्यतित रहता है, इसलिए कॉन्फ़िगरेशन परिवर्तन अप्रासंगिक हैं।
  2. देखें। प्रेजेंटर प्रारंभिकरण के दौरान मॉडल डेटा के साथ दृश्य को पॉप्युलेट करने के लिए ज़िम्मेदार है, हालांकि दृश्य कॉन्फ़िगरेशन परिवर्तनों में अपने स्वयं के राज्य को सहेजता है और पुनर्स्थापित करता है। यह एक निर्माण/संपादन स्थिति में समझ में आता है जहां 'सहेजें' बटन मौजूद है और आपके पास एक क्षणिक मॉडल (या वर्किंग मॉडल) है।

बाद वाला दृष्टिकोण समझता है जब 'सहेजें' बटन मौजूद होता है। प्रस्तुतकर्ता किसी भी तरह से शामिल नहीं है।

0

1. & सहेजें राज्य देखें (गतिविधि/टुकड़ा) में पुनर्स्थापित करें।

मैं & ही (गतिविधि/टुकड़ा) देखें में दृश्य के राज्य को बहाल करने की बचत पसंद करते हैं

इसलिए यह देखने की जिम्मेदारी अपने राज्य को बचाने के लिए (इसलिए एकल जिम्मेदारी सिद्धांत का पालन करना)।

उदाहरण

/** 
* On Save Instance State. 
* 
* @param outState Out State. 
*/ 
@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putString(STATE_KEY_USERNAME, getUserNameFieldValue()); 
    outState.putString(STATE_KEY_PASSWORD, getPasswordFieldValue()); 
    outState.putBoolean(STATE_KEY_REMEMBER_ME, getRememberMeFieldValue()); 
} 

/** 
* On Restore Instance State. 
* 
* @param savedInstanceState Saved Instance State. 
*/ 
@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    if (savedInstanceState != null) { 
     String userName = savedInstanceState.getString(STATE_KEY_USERNAME, ""); 
     String password = savedInstanceState.getString(STATE_KEY_PASSWORD, ""); 
     boolean rememberMe = savedInstanceState.getBoolean(STATE_KEY_REMEMBER_ME, false); 

     userNameEditText.setText(userName); 
     passwordEditText.setText(password); 
     rememberMeCheckBox.setChecked(rememberMe); 
    } 
} 

2. सहेजें & प्रस्तुतकर्ता

में प्रस्तुतकर्ता राज्य पुनर्स्थापित आप प्रस्तोता के किसी भी राज्य को बचाने के लिए तो यह प्रस्तोता में क्या जरूरत है।

मेरे बेस प्रस्तोता हो सकता है कि इस

/** 
* On Create View. 
* <p> 
* 1. Gets called from view's onCreate method. 
* 
* @param view   View. 
* @param savedInstanceState Saved Instance State. 
*/ 
void onCreateView(final View view, final Bundle savedInstanceState); 

/** 
* On Attach View. 
* <p> 
* 1. Gets called from view's onStart method. 
*/ 
void onAttachView(); 

/** 
* On Detach View. 
* <p> 
* 1. Gets called from view's onStop method. 
*/ 
void onDetachView(); 

/** 
* On Save State. 
* <p> 
* 1. Gets called before view is destroyed to save the state of the presenter. 
* 
* @param outState Bundle in which to place your saved state. 
*/ 
void onSaveState(final Bundle outState); 

/** 
* On Destroy View. 
* <p> 
* 1. Gets called from view's onDestroy method. 
*/ 
void onDestroyView(); 
0

दिखेगा इस मदद करता है: https://github.com/Yarikx/reductor। यह जावास्क्रिप्ट के रेडक्स से प्रेरित एक अनुमानित राज्य कंटेनर है।

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