Android पर FragmentManager के साथ काम करने के लिए उपयोगी डिज़ाइन पैटर्न


10

टुकड़ों के साथ काम करते समय, मैं स्थिर तरीकों से बना एक वर्ग का उपयोग करता रहा हूं जो टुकड़ों पर कार्रवाई को परिभाषित करता है। किसी भी दिए गए प्रोजेक्ट के लिए, मेरे पास एक वर्ग हो सकता है FragmentActions, जिसमें निम्नलिखित के समान विधियां हैं:

public static void showDeviceFragment(FragmentManager man){
    String tag = AllDevicesFragment.getFragmentTag();

    AllDevicesFragment fragment = (AllDevicesFragment)man.findFragmentByTag(tag);

    if(fragment == null){
        fragment = new AllDevicesFragment();
    }

    FragmentTransaction t = man.beginTransaction();
    t.add(R.id.main_frame, fragment, tag);

    t.commit();
}

मेरे पास आमतौर पर प्रति स्क्रीन एक विधि होगी। जब मैं छोटे स्थानीय डेटाबेस (आमतौर पर SQLite) के साथ काम करता हूं तो मैं ऐसा कुछ करता हूं, इसलिए मैंने इसे टुकड़ों में लागू किया, जो एक समान वर्कफ़्लो लगता है; मैं हालांकि इसके लिए शादीशुदा नहीं हूं।

आपने अपने एप्लिकेशन को Fragments API के साथ इंटरफ़ेस करने के लिए कैसे व्यवस्थित किया है, और क्या (यदि कोई हो) डिज़ाइन पैटर्न क्या आपको लगता है कि इसे लागू करें?


1
सभी प्रकार के टुकड़े दिखाने के लिए आपके पास एक वर्ग क्यों जिम्मेदार है? क्या यह फ्रैगमेंट क्लास के अंदर एक स्थिर तरीका नहीं होना चाहिए?
पायोत्र

जवाबों:


3

स्वीकार किए गए पैटर्न में आपके कस्टम टुकड़ा वर्ग (आमतौर पर newInstance () लेकिन हे डीलर की पसंद) के अंदर एक कारखाना विधि है। तो आपका टुकड़ा वर्ग कुछ इस तरह दिखना चाहिए:

public class MyFragment extends Fragment
{
    public static MyFragment newInstance()
    {
        MyFragment newFragment = new MyFragment();
        // add any bundle arguments here if needed
        return newFragment;
    }
    // rest of fragment class...
}

फिर, जब आप एक टुकड़ा बनाते हैं और इसे बैकस्टैक में जोड़ते हैं, तो कहने के बजाय:

MyFragment टुकड़ा = नया MyFragment ();

आप 'नए' कीवर्ड के बजाय फ़ैक्टरी विधि का उपयोग कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.