Kolesar
Kolesar

Reputation: 1283

position in PagerAdapter not work correctly

For my application I need horizontal scroll and I found example on http://code.google.com/p/android-dc-tutorial-projects/source/browse/trunk/SuperSimpleViewPager/src/com/mamlambo/simpleviewpager/SimpleViewPagerActivity.java?r=5, but this example maybe contain error or I do not know how to use PageAdapter.

If I logging position as in example bellow, I get follow message:

02-28 18:43:35.701: I/pos:(18089): 2
02-28 18:43:36.568: I/pos:(18089): 3
02-28 18:43:37.279: I/pos:(18089): 4
02-28 18:43:39.556: I/pos:(18089): 2
02-28 18:43:40.084: I/pos:(18089): 1
02-28 18:43:40.689: I/pos:(18089): 0
02-28 18:43:42.584: I/pos:(18089): 2
02-28 18:43:43.119: I/pos:(18089): 3
02-28 18:43:43.685: I/pos:(18089): 4
02-28 18:43:51.892: I/pos:(18089): 2
02-28 18:43:52.298: I/pos:(18089): 1
02-28 18:43:52.756: I/pos:(18089): 0

Always skipped one position, why???. I try increment/decrement views, but I get random position. I'm confused??? I noticed that the problematic start and end positions.

package com.mamlambo.simpleviewpager;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Toast;

public class SimpleViewPagerActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        MyPagerAdapter adapter = new MyPagerAdapter();
        ViewPager myPager = (ViewPager) findViewById(R.id.myfivepanelpager);
        myPager.setAdapter(adapter);
        myPager.setCurrentItem(5);
    }

    public void farLeftButtonClick(View v)
    {
        Toast.makeText(this, "Far Left Button Clicked", Toast.LENGTH_SHORT).show(); 

    }

    public void farRightButtonClick(View v)
    {
        Toast.makeText(this, "Far Right Elephant Button Clicked", Toast.LENGTH_SHORT).show(); 

    }

    private class MyPagerAdapter extends PagerAdapter {

        public int getCount() {
            return 5;
        }

        public Object instantiateItem(View collection, int position) {

            LayoutInflater inflater = (LayoutInflater) collection.getContext()
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            Log.i("pos: ", position+"");
            int resId = 0;
            switch (position) {
            case 0:
                resId = R.layout.farleft;
                break;
            case 1:
                resId = R.layout.left;
                break;
            case 2:
                resId = R.layout.middle;
                break;
            case 3:
                resId = R.layout.right;
                break;
            case 4:
                resId = R.layout.farright;
                break;
            }

            View view = inflater.inflate(resId, null);

            ((ViewPager) collection).addView(view, 0);

            return view;
        }

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

        }

        @Override
        public void finishUpdate(View arg0) {
            // TODO Auto-generated method stub

        }

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

        }

        @Override
        public void restoreState(Parcelable arg0, ClassLoader arg1) {
            // TODO Auto-generated method stub

        }

        @Override
        public Parcelable saveState() {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public void startUpdate(View arg0) {
            // TODO Auto-generated method stub

        }

    }

}

Upvotes: 0

Views: 1911

Answers (2)

Carbodrache
Carbodrache

Reputation: 261

You can also set a OnPageChangeListener to the ViewPager and use the method onPageSelected of this interface

Upvotes: 0

MH.
MH.

Reputation: 45493

The behaviour you're seeing is because of the offScreenPageLimit, which has a default value of 1. Basically this determines how many positions to the left and right of the current index should be loaded into memory in order to improve performance during swiping.

You can change the value to whatever suits your needs, altough I wouldn't recommend you setting it to 0. The relevant method is setOffScreenPageLimit(int).

Upvotes: 2

Related Questions