如何打造循环viewpager? [英] how to create circular viewpager?
问题描述
可能重复:
ViewPager作为一个循环队列/包装
我有三个片段班在我的code。 FirstActivity,SecondActivity,ThirdActivity我想刷一下这三个活动..这三者是从片段类扩展
公共类ViewPagerFragmentActivity扩展FragmentActivity {
私人PagerAdapter mPagerAdapter;
@覆盖
保护无效的onCreate(包savedInstanceState){
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
super.setContentView(R.layout.viewpager_layout);
initialisePaging();
}
/ **
*初始化被寻呼片段
* /
名单<片断>碎片=新矢量<片断>();
ViewPager寻呼机;
私人无效initialisePaging(){
fragments.add(Fragment.instantiate(此,FirstActivity.class.getName()));
fragments.add(Fragment.instantiate(此,SecondActivity.class.getName()));
fragments.add(Fragment.instantiate(此,ThirdActivity.class.getName()));
this.mPagerAdapter =新MyPagerAdapter(super.getSupportFragmentManager(),片段);
寻呼机=(ViewPager)super.findViewById(R.id.viewpager);
pager.setAdapter(this.mPagerAdapter);
}
}
和这里是我的FragmentPageAdapter类
公共类MyPagerAdapter扩展FragmentPagerAdapter {
私人最终名单,其中,片断>片段;
公共MyPagerAdapter(FragmentManager FM,名单,其中,片断>片段){
超(FM);
this.fragments =片段;
}
@覆盖
公共片段的getItem(INT位置){
的System.out.println(位置+位置);
返回this.fragments.get(位置);
}
@覆盖
公众诠释getCount将(){
返回this.fragments.size();
}
}
我的code是工作在这样 A< - > B< - &以及c
但我的要求是运行像这样 C< - >在< - > B< - > C< -A->
这是在圆片段swipable ...
的通知ViewPager是可能的。 随着 ViewPager作为一个循环队列/包装这个环节的帮助有codeD这样的。希望它可以帮助你需要的东西。
在CircluarPagerAdapter类:
>
公共类CircularPagerAdapter扩展PagerAdapter {
私人INT [] pageIDsArray;
私人诠释计数;
公共CircularPagerAdapter(最终ViewPager寻呼机,INT ... pageIDs){
超();
INT actualNoOfIDs = pageIDs.length;
数= actualNoOfIDs + 2;
pageIDsArray =新INT [计数]
的for(int i = 0; I< actualNoOfIDs;我++){
pageIDsArray [I + 1] = pageIDs [I];
}
pageIDsArray [0] = pageIDs [actualNoOfIDs - 1];
pageIDsArray [数 - 1] = pageIDs [0];
pager.setOnPageChangeListener(新OnPageChangeListener(){
公共无效onPageSelected(INT位置){
INT pageCount = getCount将();
如果(位置== 0){
pager.setCurrentItem(pageCount-2,假);
}否则,如果(位置== pageCount-1){
pager.setCurrentItem(1,假);
}
}
公共无效onPageScrolled(INT位置,浮positionOffset,诠释positionOffsetPixels){
// TODO自动生成方法存根
}
公共无效onPageScrollStateChanged(INT状态){
// TODO自动生成方法存根
}
});
}
公众诠释getCount将(){
返回计数;
}
公共对象instantiateItem(View容器,INT位置){
LayoutInflater充气=(LayoutInflater)container.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
INT PAGEID = pageIDsArray [位置]
查看查看= inflater.inflate(PAGEID,NULL);
((ViewPager)容器).addView(视图,0);
返回查看;
}
@覆盖
公共无效destroyItem(View容器,INT位置,Object对象){
((ViewPager)容器).removeView((查看)对象);
}
@覆盖
公共无效finishUpdate(View容器){
// TODO自动生成方法存根
}
@覆盖
公共布尔isViewFromObject(查看视图,Object对象){
返回查看==((查看)对象);
}
@覆盖
公共无效restoreState(Parcelable状态,类加载器加载器){
// TODO自动生成方法存根
}
@覆盖
公共Parcelable saveState和(){
// TODO自动生成方法存根
返回null;
}
@覆盖
公共无效startUpdate(View容器){
// TODO自动生成方法存根
}
}
这是你的主类:
>
公共类MainActivity延伸活动{
@覆盖
公共无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_main);
ViewPager myPager =(ViewPager)findViewById(R.id.conpageslider);
PagerAdapter适配器=新CircularPagerAdapter(myPager,新INT [] {R.layout.first_activity,R.layout.second_activity,R.layout.third_activity});
myPager.setAdapter(适配器);
myPager.setCurrentItem(3);
}
@覆盖
公共布尔onCreateOptionsMenu(功能菜单){
。getMenuInflater()膨胀(R.menu.activity_main,菜单);
返回true;
}
}
Possible Duplicate:
ViewPager as a circular queue / wrapping
I have three fragment classes in my code. FirstActivity,SecondActivity,ThirdActivity i want to swipe these three activities.. these three are extend from Fragment class
public class ViewPagerFragmentActivity extends FragmentActivity {
private PagerAdapter mPagerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
super.setContentView(R.layout.viewpager_layout);
initialisePaging();
}
/**
* Initialize the fragments to be paged
*/
List<Fragment> fragments = new Vector<Fragment>();
ViewPager pager;
private void initialisePaging() {
fragments.add(Fragment.instantiate(this, FirstActivity.class.getName()));
fragments.add(Fragment.instantiate(this, SecondActivity.class.getName()));
fragments.add(Fragment.instantiate(this, ThirdActivity.class.getName()));
this.mPagerAdapter = new MyPagerAdapter(super.getSupportFragmentManager(), fragments);
pager = (ViewPager) super.findViewById(R.id.viewpager);
pager.setAdapter(this.mPagerAdapter);
}
}
and here is my FragmentPageAdapter class
public class MyPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> fragments;
public MyPagerAdapter(FragmentManager fm, List<Fragment> fragments) {
super(fm);
this.fragments = fragments;
}
@Override
public Fragment getItem(int position) {
System.out.println("position"+position);
return this.fragments.get(position);
}
@Override
public int getCount() {
return this.fragments.size();
}
}
my code is working in this way A<->B<->c
but my requirement is to run like this wayC<->A<->B<->C<-A->
that is in circular fragments are swipable...
Circular ViewPager is possible. With the help of ViewPager as a circular queue / wrapping this link have coded like this. Hope it helps what you needed.
The CircluarPagerAdapter class:
>
public class CircularPagerAdapter extends PagerAdapter{
private int[] pageIDsArray;
private int count;
public CircularPagerAdapter(final ViewPager pager, int... pageIDs) {
super();
int actualNoOfIDs = pageIDs.length;
count = actualNoOfIDs + 2;
pageIDsArray = new int[count];
for (int i = 0; i < actualNoOfIDs; i++) {
pageIDsArray[i + 1] = pageIDs[i];
}
pageIDsArray[0] = pageIDs[actualNoOfIDs - 1];
pageIDsArray[count - 1] = pageIDs[0];
pager.setOnPageChangeListener(new OnPageChangeListener() {
public void onPageSelected(int position) {
int pageCount = getCount();
if (position == 0){
pager.setCurrentItem(pageCount-2,false);
} else if (position == pageCount-1){
pager.setCurrentItem(1,false);
}
}
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
// TODO Auto-generated method stub
}
public void onPageScrollStateChanged(int state) {
// TODO Auto-generated method stub
}
});
}
public int getCount() {
return count;
}
public Object instantiateItem(View container, int position) {
LayoutInflater inflater = (LayoutInflater) container.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
int pageId = pageIDsArray[position];
View view = inflater.inflate(pageId, null);
((ViewPager) container).addView(view, 0);
return view;
}
@Override
public void destroyItem(View container, int position, Object object) {
((ViewPager) container).removeView((View) object);
}
@Override
public void finishUpdate(View container) {
// TODO Auto-generated method stub
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == ((View) object);
}
@Override
public void restoreState(Parcelable state, ClassLoader loader) {
// TODO Auto-generated method stub
}
@Override
public Parcelable saveState() {
// TODO Auto-generated method stub
return null;
}
@Override
public void startUpdate(View container) {
// TODO Auto-generated method stub
}
}
and this is your main class:
>
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ViewPager myPager = (ViewPager) findViewById(R.id.conpageslider);
PagerAdapter adapter = new CircularPagerAdapter(myPager, new int[]{R.layout.first_activity, R.layout.second_activity, R.layout.third_activity});
myPager.setAdapter(adapter);
myPager.setCurrentItem(3);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
这篇关于如何打造循环viewpager?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!