2013-10-16 7 views
15

से पॉप किए जाने पर Fragment's onResume() को कॉल नहीं किया गया है नमस्ते मैं एंड्रॉइड एप्लिकेशन विकसित कर रहा हूं जिसमें मैं उपयोग कर रहा हूं मैं एकल Activity और 3 खंडों का उपयोग कर रहा हूं। तो मान लें कि मेरे पास 3 खंड ए बी हैं। जब मैं ए से बी में स्विच करता हूं, तो मैं Fragment को बैकस्टैक और बी से सी के लिए सिमिलर जोड़ने के लिए जोड़ रहा हूं। अब जब मैं सी से वापस क्लिक करता हूं तो यह मुझे बी और बी के लिए समान दिखाता है।बैकस्टैक

लेकिन बात यह है कि जब मैं सी से बी या बी से ए में आता हूं, तो यह onResume() या Fragment के किसी अन्य जीवन चक्र विधियों को नहीं बुला रहा है।

मैं वास्तव में प्रत्येक Fragment के लिए क्या करना चाहता हूं मेरे पास ActionBar में अलग-अलग शीर्षक हैं। तो, मेरे कोड में, जब मैं ए से बी या बी से सी तक जाता हूं, तो मैं खंड के अंदर गतिविधि शीर्षक बदल रहा हूं। लेकिन जब मैं वापस क्लिक करता हूं तो यह उसके अनुसार बदल नहीं रहा है।

वास्तविक समस्या क्या है? बैकस्टैक से पॉप के बाद क्यों यह मेरे Fragment के लिए onResume() पर कॉल नहीं कर रहा है? मैं इस समस्या का समाधान कैसे कर सकता हूं। मदद चाहिए। धन्यवाद।

+0

टुकड़े के रेस्यूम() को केवल तभी कहा जाता है जब गतिविधि फिर से शुरू हो जाती है। तो यह आपकी मदद नहीं करेगा। यहां तक ​​कि मुझे अभी भी इसी तरह के मुद्दे का सामना करना पड़ रहा है। आप 'ऑनबैकस्टैक चेंज लिस्टनर' को कार्यान्वित कर सकते हैं और स्टैक के शीर्ष में खंड का नाम प्राप्त कर सकते हैं और उस पर आधारित एक्शनबार शीर्षक सेट कर सकते हैं। – Uma

उत्तर

-1

फ्रैगमेंट के onCreateView() पर शीर्षक बदलने का प्रयास करें।

+0

लेकिन जब मैं ढेर से टुकड़ा खोलता हूं तो यह किसी भी जीवन चक्र विधि को नहीं बुला रहा है। तो मुझे मदद के लिए धन्यवाद क्या चाहिए। – nilkash

+0

आपको शीर्षक के क्रिएटिव्यू विधि में शीर्षक बदलने की जरूरत है। जब आप स्टैक ऑनक्रेटव्यू विधि को खंडित करते हैं या खंड जोड़ते हैं तो कॉल किया जाता है और फिर आप अपने खंड वर्ग के अनुसार शीर्षक निर्धारित करते हैं। –

+0

@ हरितत्रथी मैंने कोशिश की और @nilkash ने कहा कि 'क्रिएटिव्यू()' को तब नहीं कहा जाता है जब एक टुकड़ा तह बैक स्टैक से पॉप किया जाता है और नया दिखाई देता है। – Franco

10

replace विधि addFragmentTransaction पर add का उपयोग करने का प्रयास करें। मेरे लिए यह काम:

FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction(); 
ft.replace(R.id.fragment_container, fragment); 
ft.addToBackStack(null); 
ft.commit(); 
+0

यह काम करता है। शायद अब स्वीकार्य उत्तर होना चाहिए। – RajV

+0

टुकड़े ऑनर्यूज़() या ऑनपॉज़() केवल तभी कॉल किए जाएंगे जब रेज़्यूमे() या ऑन पॉज़() पर क्रियाएं कहा जाता है। वे कड़ाई से गतिविधि के साथ मिलकर हैं। यदि आप ऑनस्टॉप() को प्रतिस्थापित करते हैं तो कॉल किया जाएगा। – Nepster

16

Fragment की onResume() केवल कहा जाता है जब Activity फिर से शुरू किया गया है। तो यह आपकी मदद नहीं करेगा। यहां तक ​​कि मुझे अभी भी इसी तरह के मुद्दे का सामना करना पड़ रहा है। आप OnBackStackChangedListener को कार्यान्वित कर सकते हैं और स्टैक के शीर्ष में खंड का नाम प्राप्त कर सकते हैं और उस पर आधारित ActionBar शीर्षक सेट कर सकते हैं।

private FragmentManager.OnBackStackChangedListener getListener() 
{ 
    FragmentManager.OnBackStackChangedListener result = new FragmentManager.OnBackStackChangedListener() 
    { 
     public void onBackStackChanged() 
     { 
      FragmentManager manager = getFragmentManager(); 

      if (manager != null) 
      { 
       if(manager.getBackStackEntryCount() >= 1){ 
        String topOnStack = manager.getBackStackEntryAt(manager.getBackStackEntryCount()-1).getName(); 
        Log.i("TOP ON BACK STACK",topOnStack); 
       } 
       } 
      } 
    }; 

    return result; 
} 
1

इस कोड को अपने टुकड़े में रखें।

@Override 
public void setUserVisibleHint(boolean visible) { 
     super.setUserVisibleHint(visible); 
     if (visible && isResumed()) { 
      onResume(); 
     } 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     if (!getUserVisibleHint()) { 
      return; 
     } 
     setData(); 
    } 
+0

काम नहीं कर रहा है :(। –

0

दूसरों पहले ही कहा है, onResume() केवल जब गतिविधि में ही फिर से शुरू है कहा जाता है, तो यह है कि सब पर मदद करने के लिए नहीं जा रहा है।

आप आप एक नया टुकड़ा जोड़ रहे हैं, या अपने टुकड़ा लेन-देन में एक मौजूदा टुकड़ा की जगह अगर जांच करने की आवश्यकता:

  • यदि आप replace() पिछले एक टुकड़ा, कि पिछले टुकड़ा खरोंच जब से निर्मित किया जाएगा आप इसे वापस जाते हैं, इसलिए onCreateView() फिर से कॉल किया जाएगा, और आप वहां अपने टूलबार शीर्षक को अपडेट कर सकते हैं। आप शायद पहले से ही करते हैं।

  • यदि आप add() एक नया टुकड़ा है, तो पिछले खंड अभी भी वहां दिखाई नहीं दे रहा है। जब आप इसे वापस जाते हैं, तो बैक स्टैक से अंतिम प्रविष्टि प्राप्त करने के लिए आप पर निर्भर होता है (getBackStackEntryCount() और getBackStackEntryAt() खंड प्रबंधक में उपयोग करें), संबंधित फ्रैगमेंट ऑब्जेक्ट प्राप्त करें (खंड प्रबंधक में findFragmentByTag() का उपयोग करें), उस फ्रैगमेंट को कुछ बेस क्लास जो आपके सभी टुकड़े से उत्तराधिकारी होंगे, और कस्टम विधि को कॉल करें, उदाहरण के लिए उस खंड पर onVisible()। आपकी बेस क्लास में onVisible() का डिफ़ॉल्ट कार्यान्वयन कुछ भी नहीं करता है। टूलबार शीर्षक, एफएबी, और आवश्यकतानुसार कुछ भी अपडेट करने के लिए प्रत्येक खंड में ओवरराइड करें। मैं कोड डुप्लिकेशन से बचने के लिए onResume() से onVisible() पर भी कॉल कर रहा हूं।

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