कहो मेरे पास 2 टुकड़े हैं। लॉगिन और होम। मैंने होम खंड को वैश्विक गंतव्य के रूप में सेट किया है जिसमें उपयोगकर्ता डेटा तर्क के रूप में है

enter image description here

यदि उपयोगकर्ता अभी तक लॉग इन नहीं है, तो यह लॉगिन खंड से शुरू होगा। लॉगिन करने के बाद और सर्वर से उपयोगकर्ता डेटा प्राप्त करें तो यह होम पर नेविगेट करेगा और इस कोड का उपयोग करके उपयोगकर्ता डेटा पास करेगा

 val home = AuthenticationFragmentDirections.actionGlobalHomeFragment(userData)
 Navigation.findNavController(view).navigate(home, navOptions)

लेकिन समस्या तब होती है जब उपयोगकर्ता पहले ही लॉगिन कर लेता है और ऐप खोल देता है। इस स्थिति में वे सीधे घर का टुकड़ा खोल देंगे। और मैं अपना ऐप त्रुटि के साथ क्रैश करता हूं

java.lang.IllegalArgumentException: आवश्यक तर्क "userData" गुम है और उसके पास android:defaultValue नहीं है

इसलिए मुझे लगता है कि मैं User? जैसे तर्कों में शून्य डेटा प्रकार सेट कर सकता हूं, इसलिए होम खंड को उपयोगकर्ता डेटा की आवश्यकता नहीं है अगर यह लॉगिन से नहीं आता है

यहां से पढ़ने के बाद , मैंने User? हासिल करने के लिए इस तरह का तर्क निर्धारित किया है

<argument
    android:name="userData"
    android:defaultValue="@null"
    app:argType="User"
    app:nullable="true" />

लेकिन समस्या यह है कि, यह कहा गया है कि मेरे पास बहुत सारे तर्क हैं जब मैं उपयोगकर्ता डेटा को लॉगिन खंड से घर भेजने के लिए डालता हूं

मैं इसे gradle . में उपयोग करता हूं

implementation "androidx.navigation:navigation-fragment-ktx:2.3.0-alpha04"
    implementation "androidx.navigation:navigation-ui-ktx:2.3.0-alpha04"
0
sarah 23 मार्च 2020, 07:14

1 उत्तर

सबसे बढ़िया उत्तर

apply plugin: "androidx.navigation.safeargs" का उपयोग करते समय, केवल आवश्यक तर्कों को actionGlobalHomeFragment() विधि में पास किया जाता है - डिफ़ॉल्ट मानों वाले तर्क (अर्थात, जिनकी आवश्यकता नहीं होती) उत्पन्न set विधियों के साथ पारित किए जाते हैं:

val home = AuthenticationFragmentDirections.actionGlobalHomeFragment()
    .setUserData(userData)
Navigation.findNavController(view).navigate(home, navOptions)

यदि आप apply plugin: "androidx.navigation.safeargs.kotlin" (.kotlin पर ध्यान दें) लागू करके Kotlin Safe Args कोड जनरेट करने के लिए स्विच करना चाहते हैं, तो कोड कोटलिन डिफ़ॉल्ट तर्कों का उपयोग करता है (यानी, विधि घोषणा में userData: UserData = null के साथ), जो आपको उस वाक्य रचना का उपयोग करने देता है जिसे आप प्रारंभ में आजमा रहे थे:

val home = AuthenticationFragmentDirections.actionGlobalHomeFragment(userData)
Navigation.findNavController(view).navigate(home, navOptions)
10
ianhanniballake 23 मार्च 2020, 04:28