2012-06-12 15 views
5

मैं ViewPagers की एक सूची को कार्यान्वित करना चाहता हूं। ListView का प्रत्येक आइटम ViewPager है। यह अब तक काम करता है। मेरी समस्या यह है कि, मैं ViewPager की स्थिति को बनाए रख नहीं सकता। उदाहरण के लिए: जब मैं सूची में पहले ViewPager का पृष्ठ बदलता हूं, तब तक नीचे स्क्रॉल करें जब तक कि पहला ViewPager अब दिखाई नहीं दे रहा है और फिर फिर से स्क्रॉल करें, पहला ViewPager फिर से अपना पहला पृष्ठ दिखाता है।ListView में ViewPager की स्थिति को कैसे बनाए रखें?

मैंने दो एडेप्टर लिखे, एक सूची दृश्य के लिए और एक ViewPager के लिए। मैं ListAdapter में getView विधि के कनवर्ट व्यू पैरामीटर से दृश्य को रीसायकल करने का प्रयास कर रहा हूं। सुनिश्चित नहीं है कि मैं इसे सही कर रहा हूं और नहीं जानता कि ViewPagerAdapter में इसे कैसे किया जाए।

कोई भी विचार? MyListAdapter से

getView: ViewPagerAdapter से

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    if(convertView == null){ 
     LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     mRowView = inflater.inflate(R.layout.listitem, parent, false); 

    }else{ 
     mRowView=convertView; 
    } 
    switch(position){ 
    case 0://Fussball 
     ViewPagerAdapter fussballAdapter = new ViewPagerAdapter(mContext,"Fussball"); 
     ViewPager fussballPager = (ViewPager) mRowView.findViewById(R.id.viewpager1); 
     fussballPager.setAdapter(fussballAdapter); 
    break; 
    case 1://Handball 
    ViewPagerAdapter handballAdapter = new ViewPagerAdapter(mContext,"Handball"); 
     ViewPager handballPager = (ViewPager) mRowView.findViewById(R.id.viewpager1); 
     handballPager.setAdapter(handballAdapter); 
     break; 
    //.../ 
    default: 
     //Do nothing 
    } 
    return mRowView; 
} 

instantiateItem:

@Override 
public Object instantiateItem(View pager, int position) { 
    inflater = (LayoutInflater) context 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    switch(position){ 
    case 0: 
     oneLayout=inflater.inflate(R.layout.table_layout, null); 
     break; 
    case 1: 
     oneLayout=inflater.inflate(R.layout.table_layout_second, null); 
     break; 
    default: 
     oneLayout=inflater.inflate(R.layout.table_layout, null); 
     break; 
    } 
    ((ViewPager)pager).addView(oneLayout, 0); 
    return oneLayout; 
} 

धन्यवाद

यहाँ मेरी कोड अब तक है! :)

उत्तर

1

आप इस समस्या के कारण के रूप में ListView रीसाइक्लिंग का धन्यवाद कर सकते हैं। यह रीसाइक्लर को आपकी पंक्ति वस्तुओं को पुनः प्राप्त करने में सहायता करता है और इसका पुन: उपयोग करता है।

आपकी समस्या का समाधान करने वाला एक आसान फ़िक्स टैग का उपयोग कर रहा है। पंक्ति दृश्य वापस करने से पहले टैग सेट करें।

view.setTag(currentPagerPosition); 

फिर अगर convertView! = शून्य आप जानते हैं कि आप स्थिति सेट अप करना होगा ताकि आप

int pastPagerPosition = (int) view.getTag(); 
+0

आपको पृष्ठ की वर्तमान स्थिति को वर्तमान पृष्ठ को खोजने की आवश्यकता है यानी पहले पृष्ठ से अगले पृष्ठ तक? –

+0

ViewPagerAdapter में getPosition() फ़ंक्शन या उसमें कुछ ऐसा होना चाहिए। –

+0

धन्यवाद, फ्रैंक। मैंने पहले ही इसी तरह के समाधान के बारे में सोचा है, लेकिन मेरी समस्या है MyListViewAdapter के अंदर से वर्तमान ViewPager स्थिति प्राप्त करना। GetCurrentItem() नामक एक विधि है जो इसे करना चाहिए, लेकिन मुझे हमेशा "0" वापस मिल जाता है। (मैं इसे ViewView विधि के अंदर ViewPager के ऑब्जेक्ट पर उपयोग करता हूं) – kiberNet

4

कार्यान्वयन setOnPageChangeListener कर सकते हैं और आप वर्तमान स्थिति यहाँ प्राप्त कर सकते onpageselected

pager = (ViewPager) findViewById(R.id.pager); 
    pager.setAdapter(new ImagePagerAdapter(imageUrls)); 
    pager.setCurrentItem(position); 

    pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 

     public void onPageScrollStateChanged(int arg0) { 
      // TODO Auto-generated method stub 
      int i = 0; 
      int newpos = arg0; 

     } 


     public void onPageScrolled(int arg0, float arg1, int arg2) { 
      // TODO Auto-generated method stub 
      int i = 0; 
      int newpos = arg0; 

     } 

     public void onPageSelected(int arg0) { 
      // TODO Auto-generated method stub 
      int i = 0; 
      position = arg0; 
      //you can get Current position here    
     } 
    }); 

आशा इससे मदद मिलती है!!!

+0

ViewPager की वर्तमान स्थिति प्राप्त करना इस तरह से काम करता है, धन्यवाद कालाई! – kiberNet

+0

कृपया इसे उत्तर केबरनेट के रूप में चिह्नित करें –

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