2012-01-17 10 views
13

उम्मीद है कि कोई मुझे मेरे पास Viewpagers के साथ थोड़ी सी समस्या/भ्रम के साथ मदद कर सकता है और डेटा सहेज सकता है।एंड्रॉइड व्यूपार्जर डेटा और विचारों को सहेज रहा है

समस्या:

जब चार बार देखा गया मैं भर में स्क्रॉल, पहली बार देखने दो स्पिनर, दो textviews कि एक स्ट्रिंग या एक चयनित आइटम प्रदर्शित है। यदि मैं तीसरे पृष्ठ पर स्क्रॉल करता हूं और दूसरे पृष्ठ पर वापस जाता हूं, तो पहले दृश्य में डेटा खो जाता है। डेटा को बचाने की जरूरत है।

क्या यह नीचे बताए गए दो दिनचर्या में किया जाएगा? (सबसे अच्छा अनुमान यह होगा) यदि हां, तो किस प्रकार के आदेशों को बताया जाना चाहिए?

कोड:

@Override 
public void restoreState(Parcelable arg0, ClassLoader arg1) {  
} 

@Override 
public Parcelable saveState() { 
    return null; 
} 

अतिरिक्त जानकारी:

@Override 
public void destroyItem(View arg0, int arg1, Object arg2) { 
    ((ViewPager) arg0).removeView((View) arg2); 
} 

@Override 
public boolean isViewFromObject(View arg0, Object arg1) { 
    return arg0 == ((View) arg1); 
} 

@Override 
public Parcelable saveState() { 
    return null; 
} 

@Override 
public void finishUpdate(View arg0) { 
} 

@Override 
public void restoreState(Parcelable arg0, ClassLoader arg1) { 
} 

@Override 
public void startUpdate(View arg0) { 
} 
+1

arg0 एक महान चर नाम है! – Roel

उत्तर

46

बचत करने के बजाय: viewpager

public Object instantiateItem(View collection, int position) { 
} 

तरीकों की पूरी सूची में इस्तेमाल किया जा रहा है इस प्रकार हैं उन पृष्ठों की स्थिति जो आप अपने ViewPager को संशोधित कर सकते हैं ताकि यह आपके सभी पृष्ठों को इसके बजाय बफर कर सके उन्हें नष्ट करना और स्क्रॉल करते समय उन्हें दोबारा बनाना।

ViewPager pager = (ViewPager) findViewById(R.id.viewpager); 
pager.setOffscreenPageLimit(3); // the number of "off screen" pages to keep loaded each side of the current page 
pager.setAdapter(new PageAdapter(context)); 

अब आप अपने पृष्ठ 'जिंदा'

इस तकनीक तथापि से सावधान रहें, क्योंकि यह स्मृति की खपत में वृद्धि होगी रखा जाएगा:

इसलिए उदाहरण के लिए आप 4 पृष्ठों है। SetOffscreenPageLimit() को पारित संख्या वर्तमान पृष्ठ के प्रत्येक पक्ष को बनाए रखने के लिए पृष्ठों की संख्या है। इस मामले में हमारे पास कुल 4 पृष्ठ हैं, इसलिए सबसे खराब स्थिति परिदृश्य तब होता है जब हम पृष्ठ सेट के बहुत किनारे पर होते हैं - हमारे पास वर्तमान में दृश्यमान पृष्ठ है और फिर शेष 3 पृष्ठ एक तरफ स्क्रीन बंद हैं और इस प्रकार रखा जाता है याद में। हालांकि, एक बड़े डेटा सेट के साथ यह संभवतः 7 पृष्ठों को स्मृति में रखा जा सकता है (वर्तमान पृष्ठ प्लस 3 या तो दोनों तरफ)।

आम तौर पर अधिक इष्टतम समाधान पृष्ठ स्थिति को उतारने और पुनः लोड करने और उन्हें फिर से प्रस्तुत करने के साथ ठीक से निपटने के लिए होगा।

आशा इस मदद करता है

+0

मुझे नहीं पता था कि एक ऑफ स्क्रीन सीमा थी, उस पर एक नज़र डालेंगी और आपको बताएगी। आपकी सलाह के लिए धन्यवाद :) – Hadden11

+0

पता नहीं है कि यह कुछ गलत कर रहा है, लेकिन उस स्क्रीन सीमा को दर्ज करते समय यह आता है -> विधि सेटऑफस्क्रीनपेजलिमिट (int) प्रकार के लिए अपरिभाषित नहीं है एक व्यूअर – Hadden11

+0

से जुड़ा हुआ आयात आपके व्यूअर के लिए कैसा दिखता है? आयात होना चाहिए android.support.v4.view.ViewPager; –

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