How to maintain ViewPager state in ListView?

I want to implement a list of ViewPagers. Each ListView item is a ViewPager. It still works. My problem is that I cannot maintain ViewPager state. For example: when I change the page of the first ViewPager in the list, scroll down until the first ViewPager is no longer visible and then scroll up again, the first ViewPager will display its first page again.

I wrote two adapters: one for ListView and one for ViewPager. I am trying to recycle the view from the convertView parameter of the getView method into a ListAdapter. Not sure if I am doing this correctly and don’t know how to do this in the ViewPagerAdapter.

Any ideas?

here is my code:

getView from MyListAdapter:

@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 from ViewPagerAdapter:

@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;
}

Thank!:)

+5
2

ListView Recycling . , .

, , . .

view.setTag(currentPagerPosition);

, convertView!= null, , ,

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

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             
        }
    });

, !!!

+4

All Articles