16

सामान्य प्रश्न क्या मैं टुकड़े टुकड़े को सिंगलेट्स के रूप में परिभाषित कर सकता हूं?एंड्रॉइड में सिंगलटन के रूप में फ्रैगमेंट

विशिष्ट प्रश्न अपने आवेदन में मैं एक एक FragmentPager जो दो टुकड़े, FragmentA और FragmentB है के साथ 'FragmentActivity' की है।

मैं FragmentA में Singletons के रूप में टुकड़े परिभाषित Fragment वर्ग लागू होता है:

private static instance = null; 

public static FragmentA getInstance() { 
    if (instance == null) { 
     instance = new FragmentA(); 
    } 
    return instance; 
} 
private FragmentA() {} 

और मेरी FragmentPagerAdapter:

@Override 
public Fragment getItem(int position) { 
    switch(position){ 
    Fragment fragment = null; 
    case 0: 
     fragment = FragmentA.getInstance(); 
     break; 
    case 1: 
     fragment = FragmentB.getInstance(); 
     break; 
    } 
    return fragment; 
} 

और इस मैं कैसे बढ़ टुकड़े लेआउट है:

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

मेरी समस्या:

जब मैं पहली बार अपना ऐप लॉन्च करता हूं तो सबकुछ ठीक से काम करता है। जब मैं अपना ऐप बंद करता हूं और फिर इसे पुनरारंभ करता हूं, तो मैं दोनों टुकड़ों को नहीं देख रहा हूं।

+0

निजी स्थिर उदाहरण क्या है ?? मुझे विश्वास है कि यह एक त्रुटि है .. मेरा काम ठीक है – Sheychan

उत्तर

23

टुकड़े अनुप्रयोगों के पुन: प्रयोज्य घटक होने के लिए हैं। आपको सिंगलेट्स के रूप में उनका उपयोग नहीं करना चाहिए, इसके बजाय आपको Fragment.SavedState या सहेजे गए इंस्टेंसस्टेट को लागू करना चाहिए।

public class YourFragment extends Fragment { 
    // Blah blah blah you have a lot of other code in this fragment 
    // but here is how to save state 
    @Override 
    public void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     outState.putInt("curChoice", mCurCheckPosition); 
    } 
    @Override 
    public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     // savedInstanceState will have whatever you left in the outState bundle above 
    } 
} 
+0

क्या आप कृपया समझा सकते हैं? –

+0

निश्चित रूप से, मैं अपना जवाब संपादित करूंगा। – hwrdprkns

+0

मैं मूल रूप से ऐसा करना चाहता था क्योंकि मेरे टुकड़े हमेशा दिखाई देते हैं, और मैं केवल पोर्ट्रेट अभिविन्यास का समर्थन करता हूं। –