2

I want my ViewPager implementation to cycle between views instead of stopping at the last view. For example, if I have 3 views to display via a ViewPager, it should return back to the first View after the third View on fling instead of stopping at that third view. I want it to return to the first page/view when the user flings forward on the last page

Thanks a lot,

Mypageradapter;

package com.example.pictures;

import android.content.Context;
import android.media.AudioManager;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;


public class MyPagerAdapter extends  PagerAdapter{

public int getCount() {
    return 6;
}

public Object instantiateItem(View collection, int position) {

    View view=null;

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

    int resId = 0;
    switch (position) {
    case 0:
        resId = R.layout.picture1;
        view = inflater.inflate(resId, null);         
        break;
    case 1:
        resId = R.layout.picture2;   
        view = inflater.inflate(resId, null);
        break;
    case 2:
        resId = R.layout.picture3;
        view = inflater.inflate(resId, null);
        break;
    case 3:
        resId = R.layout.picture4;
        view = inflater.inflate(resId, null);
        break;
    case 4:
        resId = R.layout.picture5;
        view = inflater.inflate(resId, null);   
        break;
    case 5:
        resId = R.layout.picture6;
        view = inflater.inflate(resId, null);
        break;
    }

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

    return view;
}

@SuppressWarnings("unused")
private Context getApplicationContext() {
    // TODO Auto-generated method stub
    return null;
}


private void setVolumeControlStream(int streamMusic) {
    // TODO Auto-generated method stub

}


@SuppressWarnings("unused")
private Context getBaseContext() {
    // TODO Auto-generated method stub
    return null;
}


@SuppressWarnings("unused")
private PagerAdapter findViewById(int myfivepanelpager) {
    // TODO Auto-generated method stub
    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;
}

public static Integer getItem(int position) {
    // TODO Auto-generated method stub
    return null;
}

}

OnPageChangeListener;

package com.example.pictures;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;


public class Pictures extends Activity implements OnPageChangeListener{
SoundManager snd; 
int sound1,sound2,sound3;
View view=null;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.picturespage);

 MyPagerAdapter adapter = new MyPagerAdapter();
 ViewPager myPager = (ViewPager) findViewById(R.id.myfivepanelpager);
 myPager.setAdapter(adapter);
 myPager.setCurrentItem(0); 
 myPager.setOnPageChangeListener(this);
snd = new SoundManager(this);
 sound1 = snd.load(R.raw.sound1);
 sound2 = snd.load(R.raw.sound2);
 sound3 = snd.load(R.raw.sound3);

}
public void onPageScrollStateChanged(int arg0) {
    // TODO Auto-generated method stub

}

public void onPageScrolled(int arg0, float arg1, int arg2) {
    // TODO Auto-generated method stub

}

public void onPageSelected(int position) {
    // TODO Auto-generated method stub

    switch (position) {
    case 0:
            snd.play(sound1);
        break;
    case 1:
        snd.play(sound2);
        break;
    case 2:
            snd.play(sound3);
        break;
    case 3:
      Toast.makeText(this, "1", Toast.LENGTH_SHORT).show();
        break;
    case 4:
       Toast.makeText(this, "2", Toast.LENGTH_SHORT).show();
        break;
    case 5:
        Toast.makeText(this, "3", Toast.LENGTH_SHORT).show();
        break;
    }
}
};
Erdem Azaklı
  • 255
  • 1
  • 8
  • 27
  • While it's not perfect, I posted an answer to an identical question [here](http://stackoverflow.com/a/12965787/642160). (The main problem is that it flickers momentarily when looping.) – benkc Oct 19 '12 at 18:46

3 Answers3

0

Here's a suggestion, have you tried using FragmentStatePagerAdapter or FragmentPagerAdapter, instead of the normal PagerAdapter?

What it does is it loads fragments to be swiped through your ViewPager, it creates the fragments while running the application via class that extends Fragments.

I suggested using fragments since you can do additional logic programmitcally while the viewpages/fragments are being loaded - such as --> if (page == lastpage) then current page is this.

Viewpager has the function

  ViewPager yourViewPager.setCurrentItem(0);

I think generally this is what you want, so add this logic when your viewpager is on a basic position first or last

C - A - B - C- A

'A' would have C and B beside him all the time, and you would set the current item to (1);
'B' would have A and C bside him and set current item to (2);
and so on, and so on....

use it on

mViewPager.setOnPageChangeListener
Dharman
  • 21,838
  • 18
  • 57
  • 107
brian tang
  • 21
  • 2
0
mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
    @Override
    public void onPageSelected(int arg0) {

    }
    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {
        if(arg0 == 0 && (arg1 <= 0.001f && arg1 >= -0.001f)){
            mVp.setCurrentItem(list.size()-2, false);
        }else if(arg0 == list.size() - 1){
            mVp.setCurrentItem(1, false);
        }
    }
    @Override
    public void onPageScrollStateChanged(int arg0) {

    }
});
0

Same with @brian tang's idea. I have made my own solution. I created a ViewPager that supports infinite looping effect, smart auto-scroll, compatible with any indicators and easy to use. It especially uses it as banners of application with a simple item page.

It can:

Plug and play, easy to use

  • Infinite Looping items
  • Auto scroll items, allow config, auto resume/pause when activity/fragment resume/pause
  • Won't scroll or loop if it has only 1 item
  • Compatible with many indicators

https://github.com/kenilt/LoopingViewPager

Dharman
  • 21,838
  • 18
  • 57
  • 107
kenilt
  • 56
  • 1
  • 3