मैं नेविगेशन के लिए एंड्रॉइड नेविगेशन घटक का उपयोग कर रहा हूं। मेरे पास एक LoginFragment है जो SignUpFragment में संक्रमण करने के लिए एक बटन है। बटन पर क्लिक करने पर मुझे यह त्रुटि आ रही है।
java.lang.IllegalStateException: View android.support.v7.widget.AppCompatButton{49d9bd1 VFED..C.. ...P.... 201,917-782,1061 #7f090172 app:id/signUpLink} does not have a NavController set
यहाँ मेरा nav_graph.xml है
<navigation xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
app:startDestination="@id/loginFragment">
<fragment
android:id="@+id/loginFragment"
android:name="org.fossasia.openevent.app.core.auth.login.LoginFragment"
android:label="login_fragment"
tools:layout="@layout/login_fragment">
<action
android:id="@+id/action_loginFragment_to_signUpFragment"
app:destination="@id/signUpFragment" />
</fragment>
</navigation>
यहाँ नेविगेशन के लिए LoginFragment में कोड है -
binding.signUpLink.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_loginFragment_to_signUpFragment, null));
यहाँ NavHostFragment के लिए गतिविधि लेआउट फ़ाइल से अर्क है -
<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:name="android.navigation.fragment.NavHostFragment"
app:navGraph="@navigation/main_navigation"
app:defaultNavHost="true"/>
वर्तमान में FragmentContainerView का उपयोग करना बहुत अनुकूल नहीं है, आपको इसे supportFragmentManager से एक्सेस करना होगा:
val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
val navController = navHostFragment.navController
मेरे xml में मेरा FragmentContainerView इस तरह दिखता है:
<androidx.fragment.app.FragmentContainerView
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="0dp"
android:layout_height="0dp"
app:defaultNavHost="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="parent"
app:navGraph="@navigation/nav_graph"
/>
यह androidx नेविगेशन संस्करण के साथ परीक्षण किया गया है 2.3.0
मैंने पुराने उत्तर को हटा दिया है क्योंकि यह Google देवों द्वारा स्पष्ट किया गया है कि यह अब अनुशंसित समाधान नहीं है। धन्यवाद @Justlearnedit, एक टिप्पणी पोस्ट करने के लिए जो मुझे इस मुद्दे को अपडेट करने की अनुमति देता है।
दरअसल, फ्रेमवर्क में नेविगेशन को नेविगेशन नहीं मिल सकता है। इसलिए इसे बदलने <FrameLayout>से <fragment>काम चल जाएगा
<fragment>टैग के अंदर निम्नलिखित जोड़ें -
android:name="androidx.navigation.fragment.NavHostFragment"
परिवर्तन करने के बाद, कोड इस तरह दिखेगा -
<fragment
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:name="androidx.navigation.fragment.NavHostFragment"
app:navGraph="@navigation/main_navigation"
app:defaultNavHost="true"/>
मैंने कुछ शोध किया है और यह मुद्दा Google पर भी पाया है । तो यहाँ जावा में आधिकारिक समाधान है:
NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager()
.findFragmentById(R.id.nav_host_fragment);
NavController navCo = navHostFragment.getNavController();
और यहाँ कोटलिन में:
val navHostFragment = supportFragmentManager.findFragmentById(R.id.my_nav_host_fragment) as NavHostFragment
val navController = navHostFragment.navController
इसका कारण यह है कि Activity.onCreate()यदि आप इसे FragmentContainerView(या सिर्फ a FrameLayout) प्रयोग कर रहे हैं, तो खंड दृश्य विधि के अंदर उपलब्ध नहीं है । NavControllerइस मामले में प्राप्त करने का उचित तरीका यह है कि इसे ढूंढें NavHostFragmentऔर इससे नियंत्रक प्राप्त करें। मुद्दा और स्पष्टीकरण देखें ।
override fun onCreate(savedInstanceState: Bundle?) {
...
val navHostFragment = supportFragmentManager.findFragmentById(R.id.my_fragment_container_view_id) as NavHostFragment
val navController = navHostFragment.navController
}
कुछ अन्य उत्तरों के सुझाव के <fragment>बजाय उपयोग न करें<androidx.fragment.app.FragmentContainerView> । ऊपर बताई गई समस्या में Google टीम की टिप्पणी देखें ।
आपको हमेशा FragmentContainerView का उपयोग करना चाहिए। विंडो इनसेट्स और लेआउट मुद्दों के आसपास बिल्कुल अन्य फ़िक्सेस होते हैं, जब एक खंड का रूट लेआउट अन्य लेआउट्स जैसे कॉन्स्ट्रेनल लयआउट के भीतर होता है, इसके अलावा अंतर्निहित मुद्दों के टैग के साथ जहां उस टैग के माध्यम से जोड़े गए टुकड़े जीवनचक्र के माध्यम से जाते हैं, पूरी तरह से अन्य फ़्रैगमेंट्स से अलग होते हैं FragmentManager में जोड़ा गया। लिंट चेक बिल्कुल वहीं है क्योंकि आपको बिल्कुल सभी मामलों में FragmentContainerView पर स्विच करना चाहिए।
AndroidDevSummit 2019 से एक घोषणा भी हुई है जो बताती है कि क्यों FragmentContainerViewपेश किया गया था, और एसओ पर अंतर के बारे में एक और धागा: एक Android के लिए एक दृश्य के रूप में
OnViewCreated जैसे टुकड़े के दृश्य का उपयोग करें
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val navController = Navigation.findNavController(view)
binding.signUpLink.setOnClickListener {
navController.navigate(R.id.action_loginFragment_to_signUpFragment)
}
मैंने उसी समस्या का सामना किया। इसलिए, इसके बजाय,
binding.signUpLink.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_loginFragment_to_signUpFragment, null));
मैंने अपने NavHostFragmentको खोजने के लिए उपयोग किया NavHostFragment:
Button button = (Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Fragment navhost = getSupportFragmentManager().findFragmentById(R.id.fragment2);
NavController c = NavHostFragment.findNavController(navhost);
c.navigate(R.id.firstFragment);
}
});
fragment2है navhostfragmentID।
जावा में यह नीचे की रेखा से देखें:
Navigation.findNavController(findViewById(R.id.nav_host_fragment)).navigate(R.id.first_fragment);
मेरे लिए एक अजीब बात होती है, नीचे कोड स्निपेट Fragment1 से टुकड़ा 2 तक सामान्य प्रवाह पर काम कर रहा था, लेकिन खंड 1 पर आने और फिर से खंड 2 को नेविगेट करने के बाद, यह "नेविगेशन नियंत्रक दृश्य के लिए सेट नहीं किया गया था।
binding.ivIcon.setOnClickListener(v -> {
Openfragment2(v);});
private void Openfragment2(View view) {
Navigation.findNavController(binding.ivIcon).navigate(R.id.fragment2);
}
यहाँ समस्या को देखने में था, findNavController में ऑनक्लुसिव व्यू को पास करने की आवश्यकता थी।
private void Openfragment2(View view) {
Navigation.findNavController(view).navigate(R.id.fragment2);
}
मुझे अभी इस मुद्दे का सामना करना पड़ा, लेकिन मुझे अपने कोड के बारे में निश्चित था और तब मुझे एहसास हुआ कि मैंने मुख्य पैकेज के तहत टुकड़े को दूसरे फ़ोल्डर में बदल दिया है
इसलिए मैंने बिल्ड-> क्लीन के साथ समस्या को हल किया - फिर बिल्ड -> आईडीई को अपनी दिशा वर्ग बदलने के लिए प्रोजेक्ट बनाने के लिए
जाना दुग्गर प्यार की तलाश के बारे में खुलकर बात करती रही हैं। यहां वह सब कुछ है जो उसने विषय और शादी के लिए पांच साल की अवधि के बारे में कहा है।
'आउटलैंडर' स्टार सैम ह्यूगन ने हाल ही में खुलासा किया कि वह सेट से जेमी फ्रेजर को याद करने के लिए क्या लेंगे, जिस भूमिका ने उन्हें स्टार बनाया था।
'शी लव्स यू' एक घंटे में लिखा गया, एक दिन में रिकॉर्ड किया गया और यह द बीटल्स का उनके करियर का सर्वश्रेष्ठ प्रदर्शन वाला गाना था।
डॉली पार्टन और उनकी दादी बेसी के बीच एक विशेष रिश्ता था। दादी पार्टन बहुत बीमार थीं, लेकिन उसने डॉली को उनके साथ मज़ाक करने से नहीं रोका।
आप सोच सकते हैं कि ओक या हिकॉरी कठोर होती है, लेकिन जब दुनिया की सबसे कठोर लकड़ी की बात आती है, तो वे उसके आसपास भी नहीं फटकतीं।
समुद्र खूबसूरती से भरपूर है, लेकिन इसमें धरती के कुछ सबसे डरावने समुद्री जीव भी छिपे हैं। इनमें से कई जीव समुद्र की सतह से बहुत नीचे, गहरे समुद्र की अंधेरी, उच्च दबाव वाली दुनिया में छिपे रहते हैं।
अगर आप दुश्मन भीड़ से लड़ रहे हैं या PvP परिदृश्यों के लिए तैयारी कर रहे हैं, तो Minecraft में उपलब्ध सर्वोत्तम तलवारों के जादू को जानना आपको एक बड़ी बढ़त दिला सकता है। तलवारों पर जादू करने से आप ज़्यादा नुकसान पहुँचा सकते हैं, भीड़ पर पड़ने वाले प्रभाव को बढ़ा सकते हैं और अपनी तलवार की टिकाऊपन बढ़ा सकते हैं।
जब लोग समाजवादी देशों की बात करते हैं, तो अक्सर उनकी कल्पना पूर्ण सरकारी नियंत्रण और निजी स्वामित्व के अभाव की होती है। लेकिन व्यवहार में, समाजवादी अर्थव्यवस्थाएँ व्यापक रूप से भिन्न होती हैं।
'चिल्ड्रन' में एक बड़े नाम की कैमियो और कुछ विनाशकारी खबरें सामने आईं
दावा किया जाता है कि यह RAV4 उत्कृष्ट स्थिति में है और म्यूजिकल चेयर के खेल के लिए तैयार है।
ड्रोन फुटेज में अग्निशमन कर्मियों को आग बुझाने के लिए संघर्ष करते हुए देखा गया।
आइज़ ऑफ वकांडा सीधे तौर पर MCU से जुड़ा हुआ है, साथ ही इसमें एक्स-मेन '97, व्हाट इफ..., डेयरडेविल, आदि पर अपडेट भी शामिल हैं।
जॉन क्लीज़ ने 2012 में अपनी पत्नी जेनिफर वेड से विवाह किया। जॉन क्लीज़ की पत्नी जेनिफर वेड के बारे में जानने योग्य सब कुछ यहां है।
पैटन ओसवाल्ट ने 2017 में अपनी पत्नी, साथी अभिनेत्री मेरेडिथ सालेंगर से शादी की। यहां पैटन ओसवाल्ट की पत्नी मेरेडिथ सालेंगर के बारे में जानने योग्य सब कुछ है।
माइकल सी. हॉल की शादी 2016 से उनकी पत्नी मॉर्गन मैकग्रेगर से हुई है। माइकल सी. हॉल की पत्नी के बारे में जानने के लिए यहां सब कुछ है।
जॉन ओलिवर और उनकी पत्नी केट नोर्ले की शादी 2011 से हुई है। जॉन ओलिवर की पत्नी के बारे में जानने के लिए यहां सब कुछ है।
यह मुझ पर अचानक प्रहार करता है जैसा कि यह अक्सर करता है यह फिर से बीच का रास्ता है <नहीं, वह नहीं जो प्रशांत में आप मैरून हैं, जो कार्निवल में है> हर हेडलाइन जोर से… ..
2022 में, GPT-3 के जारी होने के साथ, लेखन कौशल कम महत्वपूर्ण होता जा रहा है। एआई के साथ, खराब लेखन वाले लोग भी गुणवत्तापूर्ण कर्मचारी तैयार कर सकते हैं।
आज की तेज-तर्रार और प्रतिस्पर्धी दुनिया में, किसी का करियर व्यक्तिगत विकास, वित्तीय स्थिरता और समग्र जीवन संतुष्टि में महत्वपूर्ण भूमिका निभाता है। हालांकि, कई लोग खुद को ठहराव और असंतोष के एक अथक चक्र में फंसा हुआ पाते हैं, धीरे-धीरे अपने पेशेवर जीवन को बर्बाद कर रहे हैं।
पिछले हफ्ते मैंने एक प्रेस विज्ञप्ति देखी, जिसे PressGazette (एक ब्रिटिश मीडिया समाचार वेबसाइट) के माध्यम से भेजा गया था। लेख ने घोषणा की कि एकास्ट, स्कैंडी पॉडकास्ट होस्टिंग और विज्ञापन कंपनी, पॉडकास्टिंग में "शायद सबसे प्रभावशाली" प्रकाशकों के एक संघ का नेतृत्व करेगी।