जब एक Viewmodel के निर्माता कहा जाता है.

0

सवाल

मैं जा रहा हूँ के माध्यम से इस codelab: https://developer.android.com/codelabs/android-lifecycles#6 यह बताता है कि कैसे का उपयोग करने के लिए SavedStateHandle में एक ViewModel करने के लिए जीवित रहने की प्रक्रिया मृत्यु है । निर्माता के ViewModel के रूप में नीचे है:

    private SavedStateHandle mState;

    public SavedStateViewModel(SavedStateHandle savedStateHandle) {
       mState = savedStateHandle;
    }

और viewmodel प्रारंभ किया है के रूप में गतिविधि में इस प्रकार है:

    mSavedStateViewModel = new ViewModelProvider(this).get(SavedStateViewModel.class);

जब ViewModel के निर्माता कहा जाता है? और कैसे करता है Viewmodel प्राप्त savedStateHandle पैरामीटर के ViewModel?

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

मैं पाया मेरे सवाल का जवाब के माध्यम से इस blogpost: https://www.rockandnull.com/viewmodel-savedstate/

यह कहना है कि अगरSavedStateHandle केवल पैरामीटर में हमारे viewmodel के निर्माता के by viewModels प्रतिनिधि प्रदान करता है यह करने के लिए viewmodel स्वचालित रूप से ।

हालांकि, अगर हम एक संयोजन के कस्टम पैरामीटर द्वारा ही प्रदान की जाती निर्भरता इंजेक्शन ढांचे(मूठ) ई । छ: भंडार, अन्य के एक जोड़े क्रम तर्कों ई.छ: चयनित श्रेणी आईडी और SavedStateHandle हमें मदद करने के लिए जीवित रहने की प्रक्रिया में मौत viewmodel के निर्माता - कैसे कर सकते हैं हम प्रदान करते हैं उन सभी मापदंडों कारखाने के लिए?

कृपया पोस्ट एक छोटे से उदाहरण के लिए, मेरी समझ

android android-lifecycle viewmodel
2021-11-24 03:13:47
1

सबसे अच्छा जवाब

4

के Codelab आप का अनुसरण कर रहे हैं बनाने के लिए है आप समझते हैं एक विशिष्ट अवधारणा के बजाय पूरे कोड . कोई कार्यान्वयन द्वारा प्रदान की जाती है उन्हें के बारे में अपने शक है , जो है , कैसे करता है ViewModel इसे पाने के मापदंडों ?


अवलोकन : के कारण कुछ आंतरिक कार्यान्वयन के ViewModel , तुम नहीं कर सकते पारित करने के लिए तर्क ViewModel सीधे , बजाय आप की जरूरत है बनाने के लिए एक तृतीय श्रेणी प्रदान करता है जो करने के लिए मानकों ViewModel.


जवाब करने के लिए अपने शक :

वहाँ रहे हैं दो तरीकों के माध्यम से जो एक ViewModel प्राप्त कर सकते हैं यह पैरामीटर :

  1. गैर-निर्भरता इंजेक्शन तरीका: यहाँ आप बनाने के लिए एक वर्ग का विस्तार ViewModelProvider.निर्यातक . अपने कोड में , आप यहाँ देख सकते हैं :
  mSavedStateViewModel = new ViewModelProvider(this).get(SavedStateViewModel.class);

यहाँ एक डिफ़ॉल्ट श्रेणी बनाई गई है जिसमें , कोई तर्क पारित कर रहे हैं .यह किया जाता है के प्रयोजन के लिए प्रारंभ है जो एक अधूरी रास्ते में दिए गए codelab को व्यक्त करने के लिए की जरूरत है । आप कर सकते हैं का एक अच्छा राशि प्राप्त ज्ञान पर एक ही अवधारणा के माध्यम से इस लेख में :

https://medium.com/koderlabs/viewmodel-with-viewmodelprovider-factory-the-creator-of-viewmodel-8fabfec1aa4f

  1. निर्भरता इंजेक्शन तरीका: अब , यह सबसे आसान तरीका है को लागू करने के लिए एक ViewModelProviders यदि आप जानते हैं DI ढांचे बढ़ाता है । यहाँ आप बस की जरूरत है व्याख्या करने के लिए अपने ViewModel के साथ @ViewModelInject और आप कर रहे हैं .डि ढांचे में पृष्ठभूमि पैदा करेगा एक ViewModelFactory के बजाय आप यह कर रहे हैं .यह नमूना कोड के कैसे आप प्रदान करने के लिए मानकों ViewModel का उपयोग विस्तारपूर्वक :

class SampleViewModel @ViewModelInject constructor(
                     @Assisted private val savedStateHandle: SavedStateHandle) : ViewModel() { }
2021-11-24 04:17:44

मैं debugged अनुप्रयोग से codelab. यह निर्माता बुलाया जा रहा है, हालांकि मैं नहीं कर रहा हूँ गुजर किसी भी निर्यातक. यह कैसे संभव है? जो गुजरता है SavedStateHandle निर्माता के लिए?
Neeraja Gandla

आप कर सकते हैं लिंक साझा करने के लिए आवेदन ? क्या आप आवेदन चलाने पर स्थानीय रूप से एंड्रॉयड स्टूडियो ? क्योंकि github लिंक करने के लिए, कोड में उल्लेख किया codelab का उल्लेख कुछ usecases और उनके समाधान , वहाँ है कोई पूर्ण समाधान की तरह एक पूरा आवेदन
Karunesh Palekar

आप डाउनलोड कर सकते हैं स्रोत कोड यहाँ से: developer.android.com/codelabs/android-lifecycles#1
Neeraja Gandla

यह भी देखने के लिए कृपया में संपादित अनुभाग के सवाल
Neeraja Gandla

खुश आप अपने जवाब है .
Karunesh Palekar

आप विस्तृत कर सकते हैं और अधिक पर अपने संपादित ? मैं नहीं मिल रहा हूँ सटीक सामग्री आप चाहते हैं पता करने के लिए . ViewModel प्रदान करता है, आप अतिरिक्त कार्यक्षमता के कैशिंग के लिए अपने डेटा स्क्रीन अभिविन्यास , तो प्रदान करने के लिए इन की कार्यक्षमता के साथ , डेवलपर्स था एक रास्ता खोजने के लिए है , जिसमें इस एक था वे बाहर पाया . हम सभी android के डेवलपर्स के माध्यम से जाना है इस तरह के उदाहरणों में से एक बहुत अपने कैरियर में, मैं आशा है आप समझ
Karunesh Palekar

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................