Reputation: 1283
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
Reputation: 261
You can also set a OnPageChangeListener to the ViewPager and use the method onPageSelected of this interface
Upvotes: 0
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