2013-08-25 8 views
9

मैं कई fragment एस का उपयोग कर गतिशील रूप से activity में जोड़ा जा रहा हूं। सब कुछ ठीक काम करता है, जब मैं बैक-बटन दबाता हूं, fragment एस backstack पर जाता है। और जब मैं resume यह, ऐसा प्रतीत होता है। लेकिन हर बार Resume पर, यह fragment को पुनर्निर्माण कर रहा है और onCreateView पर कॉल कर रहा है। मुझे पता है कि यह fragment जीवन चक्र का सामान्य व्यवहार है।फिर से शुरू होने के बाद पुनर्गठन को रोकने से रोकें?

यह मेरा onCreateView:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View rootView = inflater.inflate(
      R.layout.competitive_programming_exercise, container, false); 
    return rootView; 
} 

मैं पुनः बनाने से उन fragment रों बंद करना चाहते हैं। मैंने onSavedInstanstate के साथ प्रयास किया लेकिन कुछ भी काम नहीं कर रहा है। मैं इसे कैसे पूरा कर सकता हूं?

उत्तर

4

दुर्भाग्यवश, आप टुकड़े को फिर से बनाए जाने से नहीं रोक सकते हैं। सबसे अच्छा आप कर सकते हैं लेनदेन में टुकड़े को हटाने के बाद, इसे बहाल करने के बाद, लेकिन इसे प्रदर्शित होने से पहले।

यदि आप जानते हैं कि आप तुरंत टुकड़े को हटाने जा रहे हैं तो आप पूरे दृश्य पदानुक्रम को फिर से भरने के बजाय, onCreateView() जैसे विधियों को सरल बनाकर टुकड़े को बहाल करने के प्रदर्शन हिट को कम कर सकते हैं।

दुर्भाग्य से मुश्किल हिस्सा इस लेनदेन को करने के लिए सबसे अच्छी जगह ढूंढ रहा है। this article के अनुसार कई सुरक्षित स्थान नहीं हैं। शायद आप FragmentActivity.onResumeFragments() या संभवतः Fragment.onResume() के अंदर आज़मा सकते हैं।

+1

आपकी प्रतिक्रिया के लिए धन्यवाद। कुछ कोड उदाहरण सहायक होंगे! :) –

9

गतिविधि में onCreateView सुपर विधि को कॉल करने से पहले savedInstanceState को शून्य पर सेट करें। आप सहेजे गए इंस्टेंसस्टेट बंडल से केवल "चाबियाँ" एंड्रॉइड: व्यू हाइरार्चरीस्टेट "और" एंड्रॉइड: खंड "को हटा सकते हैं। यहाँ सरल समाधान के लिए कोड है, जो देश nulling:

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    savedInstanceState = null; 
    super.onCreate(savedInstanceState); 

    ... 
} 
3

Iam 5 टुकड़े का उपयोग कर और मेरे लिए काम कर अच्छा के रूप में मैं एक ही समस्या से ठीक पहले का सामना करना पड़ रहा था ..

public class MyFragmentView1 extends Fragment { 

    View v; 
    @Override 
    public View onCreateView(LayoutInflater inflater, 
          @Nullable ViewGroup container, 
       @Nullable Bundle savedInstanceState) { 
     if (v == null) 
      v = inflater.inflate(R.layout.my_fragment_view_layout, 
       container, false 
      ); 
     return v; 
    } 
} 

मैं दृश्य चर डाल कक्षा के अंदर और इसे केवल नए के रूप में फुलाएं यदि दृश्य उदाहरण शून्य है या अन्यथा

+0

इसने अंत में मेरी समस्या हल की। धन्यवाद दोस्त –

+0

आपका स्वागत है @ jahsonkimulu – Sayka

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