17

पर लागू करने का प्रयास मेरे आवेदन में 4 टुकड़े होते हैं क्योंकि FragmentPagerAdapter का उपयोग करके अभिभावक फ्रैगमेंट के अंदर टैब लोड किए जाते हैं।आभासी विधि 'android.os.Handler android.support.v4.app.FragmentHostCallback.getHandler()' को एक शून्य ऑब्जेक्ट संदर्भ

समस्या

है जब मैं अनुप्रयोग और प्रेस वापस चलाने के लिए और एप्लिकेशन मैं इस त्रुटि लॉग प्राप्त को फिर से खोलने:

FATAL EXCEPTION: main 
java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Handler android.support.v4.app.FragmentHostCallback.getHandler()' on a null object reference 
    at android.support.v4.app.FragmentManagerImpl.ensureExecReady(FragmentManager.java:1949) 
    at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1965) 
    at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:620) 
    at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143) 
    at android.support.v4.view.ViewPager.setAdapter(ViewPager.java:513) 
    ... 

माता पिता टुकड़ा अंदर कोड की पंक्ति है:

viewPager.setAdapter(adapter); 
tabLayout.setupWithViewPager(viewPager); 

और ViewPage और Adapter दोनों शून्य नहीं हैं !!

मुझे लगता है कि मेरे सभी Fragment रों जीवन चक्र प्रबंधित किया जा रहा उल्लेख करना होगा और अशक्त मुद्दा एडाप्टर के अंदर क्या हो रहा है !, और एक ही एडाप्टर ठीक है जब मैं बजाय माता पिता Fragment के रूप में एक Activity का उपयोग कर रहा है !!!

उत्तर

30

अनुसंधान के एक बहुत बाद, ऐसा लगता है कि यह एक समर्थन पुस्तकालय मुद्दा है:

Activity with fragment and ViewPager crashesh on configuration change
Android Support Library issue 24.1.0

मैं भी इस सवाल का जवाब मिल गया है, लेकिन यह करने के लिए एक ध्वज जोड़ने असामान्य लग रहा है मेरी कोड:

Attempt to invoke virtual method ‘android.os.Handler android.support.v4.app.FragmentHostCallback.getHandler()’ on a null object

मैं इस FragmentPagerAdapter की finishUpdate विधि को ओवरराइड करता हूं और इस समस्या को हल किया गया है!

@Override 
public void finishUpdate(ViewGroup container) { 
    try{ 
     super.finishUpdate(container); 
    } catch (NullPointerException nullPointerException){ 
     System.out.println("Catch the NullPointerException in FragmentPagerAdapter.finishUpdate"); 
    } 
} 

कोई बेहतर उत्तर? कृपया मुझे बताएं ...

+1

मैं एक ही समस्या का सामना करना पड़ रहा है जब तक एक अधिकारी ठीक है, मैं इसे ठीक की कोशिश करेंगे जारी किया गया, –

+0

खुशी है कि यह मदद करता है :) –

+1

मेरे लिए काम किया ... धन्यवाद। – Manoj

2

मेरे पास एक ही समस्या थी और यह एक टुकड़े के विभिन्न उदाहरणों द्वारा ViewPager उदाहरण के पुन: उपयोग के कारण हुआ था। एक समाधान onDestroyView() टुकड़े की विधि में एडाप्टर को खोना था।

@Override public void onDestroyView() { 
    mViewPager.setAdapter(null); 
    super.onDestroyView(); 
} 

परियोजना मुद्दा और समाधान can be found here demoing।

3

मुझे एक ही समस्या थी। मेरे मामले में समस्या यह थी कि मैं पिछले समय से एडाप्टर को ध्यान में रखे बिना फिर से उपयोग कर रहा था।

मैं FragmentManager.java वर्ग कि अपवाद भेजने में और बहुत ही पंक्ति है कि दुर्घटनाओं पर देखा कहते हैं:

PagerAdapter adapter = MPageAdapter.getInstance(getSupportFragmentManager()); 
viewPager.setAdapter(adapter); 
:

मेरी कोड था "टुकड़ा मेजबान के मुख्य थ्रेड से बुलाया जाना चाहिए"

क्योंकि मैं अपने पेज एडाप्टर को टुकड़ों के बीच संवाद करने के लिए एक पुल के रूप में उपयोग कर रहा था, मैंने एक सिंगलटन पैटर्न का उपयोग किया था। यह मेरे लिए अच्छा काम करता है लेकिन एक बार जब मैंने इस संरचना को दूसरी गतिविधि में दोहराया तो मुझे एक ही अपवाद मिला। और कारण यह था कि मैं प्रत्येक उपयोग के अंत में अपने एडाप्टर वर्ग के सिंगलटन को नष्ट करना भूल गया था।

@Override 
protected void onDestroy() { 
    MPageAdapter.Destroy(); //I forgot this one, that makes singleton = null; 
    super.onDestroy(); 
} 
2

मैं इसे देर से हो सकता है, लेकिन यहाँ मेरा बेवकूफ गलती है मैं सीधे नहीं देखा:

@Override 
public void onStop() { 
    super.onDestroy(); //I was calling the wrong super 
} 
संबंधित मुद्दे

 संबंधित मुद्दे