मैंने हाल ही में Google द्वारा जारी किए गए नए एंड्रॉइड आर्किटेक्चर घटकों पर नज़र डालने का फैसला किया है, विशेष रूप से उनके व्यूमोडेल लाइफसाइक्ल-जागरूक वर्ग का उपयोग एमवीवीएम आर्किटेक्चर और लाइवडाटा में कर रहा है।एमवीवीएम पैटर्न और स्टार्ट एक्टिविटी
जब तक मैं एक ही गतिविधि, या एक टुकड़ा से निपट रहा हूं, सबकुछ ठीक है।
हालांकि, मुझे गतिविधि स्विचिंग को संभालने के लिए एक अच्छा समाधान नहीं मिल रहा है। कहें, एक संक्षिप्त उदाहरण के लिए, गतिविधि ए को गतिविधि बी
लॉन्च करने के लिए एक बटन है प्रारंभिकता() को कहां संभाला जाएगा?
एमवीवीएम पैटर्न के बाद, क्लिक लिस्टनर का तर्क व्यूमोडेल में होना चाहिए। हालांकि, हम वहां गतिविधि के संदर्भ होने से बचना चाहते हैं। तो ViewModel को संदर्भ पास करना एक विकल्प नहीं है।
मैंने "ओके" लगने वाले कुछ विकल्पों को संकुचित कर दिया, लेकिन "यहां यह कैसे करना है" का कोई उचित उत्तर नहीं मिला।
विकल्प 1: संभावित रूटिंग (ACTIVITY_B, ACTIVITY_C) पर मूल्य मैपिंग के साथ व्यूमोडेल में एक enum है। इसे लाइवडाटा के साथ जोड़ो। गतिविधि इस लाइवडेटा का निरीक्षण करेगी, और जब व्यूमोडेल निर्णय लेता है कि ACTIVITY_C लॉन्च किया जाना चाहिए, तो यह केवल Value (ACTIVITY_C) पोस्ट करेगा। गतिविधि सामान्य रूप से startActivity() को कॉल कर सकती है।
विकल्प 2: नियमित इंटरफ़ेस पैटर्न। विकल्प 1 के समान सिद्धांत, लेकिन गतिविधि इंटरफ़ेस को कार्यान्वित करेगी। हालांकि मैं इसके साथ थोड़ा और अधिक जोड़ रहा हूँ।
विकल्प 3: संदेश विकल्प, जैसे ओटो या इसी तरह के। ViewModel एक प्रसारण भेजता है, गतिविधि इसे उठाती है और इसे लॉन्च करता है। इस समाधान के साथ केवल समस्या यह है कि, डिफ़ॉल्ट रूप से, आपको ViewModel के अंदर उस प्रसारण का पंजीकरण/पंजीकरण रद्द करना चाहिए। तो मदद नहीं करता है।
विकल्प 4: कहीं भी एक सिंगलटन या समान के रूप में, एक बड़ी रूटिंग कक्षा होने के कारण, किसी भी गतिविधि के लिए प्रासंगिक रूटिंग प्रेषित करने के लिए कहा जा सकता है। अंततः इंटरफ़ेस के माध्यम से? इसलिए हर गतिविधि (या एक BaseActivity) लागू करेगा
IRouting { void requestLaunchActivity(ACTIVITY_B); }
इस विधि बस मुझे थोड़ा चिंता अपने ऐप के टुकड़े/गतिविधियों का एक बहुत (क्योंकि रूटिंग वर्ग humongous बन जाएगा)
होने ताकि है शुरू होता है यह। यह मेरा सवाल है। आप लोग इसे कैसे संभालेंगे? क्या आप एक ऐसे विकल्प के साथ जाते हैं जिस पर मैंने नहीं सोचा था? आप सबसे प्रासंगिक क्या विकल्प चुनते हैं और क्यों? अनुशंसित Google दृष्टिकोण क्या है?
पुनश्च: लिंक है कि मुझे नहीं मिला कहीं भी 1 - Android ViewModel call Activity methods 2 - How to start an activity from a plain non-activity java class?
धन्यवाद। आपकी मदद करने में खुशी हुई :-) –