प्रसंग की कोशिश कर रहा: मैं एक Fragment
और 3 InnerFragments
के साथ एक Activity
है। जब Fragment
onDestroy()
कहा जाता है, तो मैं FragmentManager
से आंतरिक टुकड़े को हटाना चाहता हूं। onDestroy()
से कोड नीचे है।FragmentManager NullPointerException जब commitAllowingStateLoss को
समस्या:FragmentManager
NullPointerException
फेंकता है, शायद जब commitAllowingStateLoss()
कहा जाता है। मुझे समझ में नहीं आता क्यों।
@Override
public void onDestroy()
{
super.onDestroy();
if (getFragmentManager().findFragmentById(R.id.fragment_framelayout_left) != null)
{
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.remove(mLeftFragment);
fragmentTransaction.commitAllowingStateLoss();
}
}
स्टैक ट्रेस:
02-11 12:15:14.162: E/AndroidRuntime(25911): FATAL EXCEPTION: main
02-11 12:15:14.162: E/AndroidRuntime(25911): java.lang.NullPointerException
02-11 12:15:14.162: E/AndroidRuntime(25911): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1419)
02-11 12:15:14.162: E/AndroidRuntime(25911): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:429)
02-11 12:15:14.162: E/AndroidRuntime(25911): at android.os.Handler.handleCallback(Handler.java:725)
02-11 12:15:14.162: E/AndroidRuntime(25911): at android.os.Handler.dispatchMessage(Handler.java:92)
02-11 12:15:14.162: E/AndroidRuntime(25911): at android.os.Looper.loop(Looper.java:137)
02-11 12:15:14.162: E/AndroidRuntime(25911): at android.app.ActivityThread.main(ActivityThread.java:5039)
02-11 12:15:14.162: E/AndroidRuntime(25911): at java.lang.reflect.Method.invokeNative(Native Method)
02-11 12:15:14.162: E/AndroidRuntime(25911): at java.lang.reflect.Method.invoke(Method.java:511)
02-11 12:15:14.162: E/AndroidRuntime(25911): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
02-11 12:15:14.162: E/AndroidRuntime(25911): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
02-11 12:15:14.162: E/AndroidRuntime(25911): at dalvik.system.NativeStart.main(Native Method)
मैं अपनी वास्तुकला पूरी तरह से पालन नहीं कर रहा हूँ। 'इनफ्रैगमेंट्स' को 'फ्रैगमेंट' में लाइव करें? यदि ऐसा है, तो मुझे लगता है कि आपको 'getChildFragmentManager()' प्रबंधित करना चाहिए ('गतिविधि' के 'FragmentManager' नहीं)। इस तरह, जब 'फ्रैगमेंट' नष्ट हो जाता है, तो इस अतिरिक्त कोड के बिना, इसके बच्चे 'इनरफ्रैगमेंट्स' भी होते हैं। –
हां, आंतरिक टुकड़े टुकड़े के अंदर रहते हैं (कम से कम गोलियों पर)। फोन पर, वे एक गतिविधि के अंदर रहते हैं (गतिविधि 1 के अंदर InnerFragment1, गतिविधि 2 के अंदर InnerFragment2)। यही कारण है कि मैं उस कोड का उपयोग कर रहा था। क्या यह गतिविधियों में getChildFragmentManager() के साथ भी काम करेगा? LE: बेवकूफ सवाल, क्षमा करें। मैं कुछ घंटों में अपना विचार आज़माउंगा और देख सकता हूं कि यह कैसा चल रहा है। –
'getChildFragmentManager()' केवल 'Fragments' में है, क्योंकि 'गतिविधियां' बच्चों को 'FragmentManagers' तक नहीं पहुंच सकती हैं। हालांकि, 'Fragments'' getFragmentManager() 'को कॉल कर सकते हैं और अपने माता-पिता' गतिविधि 'के' FragmentManager' तक पहुंच सकते हैं, जिससे उन्हें अपने माता-पिता 'गतिविधि' की आवश्यकता के बिना स्वयं के शीर्ष पर 'Fragments' शुरू करने की अनुमति मिलती है। –