2011-11-17 10 views
6

मेरे पास एक ViewPager के साथ एक FragmentActivity है - इस ViewPager में तीन ListViews शामिल हैं - प्रत्येक के पास अपने स्वयं के अद्वितीय एडाप्टर (और अद्वितीय डेटा सेट) हैं।एकाधिक एसिंक टास्कलोडर एक ही गतिविधि में - क्या प्रत्येक लोडर को क्रिएट में प्रारंभ करना होगा?

मैं इन एडेप्टरों को पॉप्युलेट करने के लिए AsyncTaskLoader का उपयोग करना चाहता हूं, लेकिन केवल जब व्यूपेजर में दिया गया दृश्य चुना जाता है।

क्या गतिविधि की ऑन क्रिएट विधि में लोडर को इनिट करना आवश्यक है? (नीचे दिए गए कोड)

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_foo); 

    getSupportLoaderManager().initLoader(0, null, this); 
    getSupportLoaderManager().initLoader(1, null, this); 
    getSupportLoaderManager().initLoader(2, null, this); 
} 

या यह कॉल करने के लिए initLoader (...) सहभागी, इस तरह के OnPageChangeListener.onPageSelected के लिए एक श्रोता के परिणाम के रूप फोन ठीक है?

mPager.setOnPageChangeListener(new OnPageChangeListener() { 
    @Override 
    public void onPageSelected(int newPage) { 
     getSupportLoaderManager().initLoader(newPage, null, this); 
    } 

    ... 
} 

मैं संभवतः 3 समय लेने लोडर प्रदर्शन करने के लिए सामने अगर उपयोगकर्ता ही कभी पेजर में पहली बार देखने पर लग सकता है से बचने के लिए चाहते हैं।

संपादित करें: या क्या यह एक बेहतर डिज़ाइन होगा कि ViewPager प्रत्येक दृश्य के लिए एक टुकड़ा का उपयोग करे, और प्रत्येक टुकड़ा अपने लोडर के प्रबंधन के लिए जिम्मेदार होगा?

+0

मैंने आखिरकार लिस्टफ्रैगमेंट के उप-वर्गों के साथ एक व्यूपेगर का उपयोग किया (प्रत्येक में अपना स्वयं का लोडर होता है - जिसे क्रिएटिव्यू से शुरू किया जाता है) - लेकिन मैं अभी भी जानना चाहूंगा कि उपर्युक्त करना ठीक है या नहीं बस एक आपदा होने का इंतजार है। – NPike

उत्तर

1

मैं विवरण याद नहीं है, लेकिन कम से कम अनुकूलता पुस्तकालय के साथ, आप onCreate() से initLoader() फोन नहीं है, लोडर के जीवनचक्र में गड़बड़ हो जाता है, तो आप (फिक्स्ड किया जा सकता है onCreate() से उन्हें कॉल करने के लिए चाहते हो सकता है नवीनतम संस्करण में, परीक्षण नहीं किया है)। आईआईआरसी, टुकड़े सिर्फ गतिविधि के लोडर प्रबंधक का उपयोग करते हैं, इसलिए लोडर हमेशा गतिविधि द्वारा प्रबंधित होते हैं। टुकड़ों का उपयोग आम तौर पर आपके कोड क्लीनर को बना देगा, इसलिए यदि संभव हो तो टुकड़ों में माइग्रेट करें।

1

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

उपरोक्त आपके कोड में मुझे पता चला कि प्रत्येक बाद के लोडर का प्रारंभिकरण निष्पादन को रद्द कर देगा पिछले एक आईडी भी अलग हैं

+0

मैंने निकोले एलेनकोव के जवाब को स्वीकार किया, लेकिन जैसा कि आपने मेरे वास्तविक कार्यान्वयन में वर्णित किया है, वही कर रहा हूं। – NPike

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