Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ViewPager上一页/下一页按钮_Android_Button_Navigation_Android Viewpager - Fatal编程技术网

Android ViewPager上一页/下一页按钮

Android ViewPager上一页/下一页按钮,android,button,navigation,android-viewpager,Android,Button,Navigation,Android Viewpager,好的,我正在开发一个Android应用程序,它使用一个ViewPager来显示页面 在每个页面中,我都有一组用于在页面之间导航的按钮(除了页面之间的滑动)。这些按钮用于“第一页”、“上一页”、“下一页”和“最后一页” 我不知道该怎么做的是设计一种机制,通过点击按钮来改变页面 有人有什么想法吗 ETA:为了更好地解释设置,按钮在每个页面的布局中声明,并在PagerAdapter中与布局的其余部分一起充气。我的问题是无法从PagerAdapter中引用ViewPager。或者至少,我想不出一个方法来

好的,我正在开发一个Android应用程序,它使用一个ViewPager来显示页面

在每个页面中,我都有一组用于在页面之间导航的按钮(除了页面之间的滑动)。这些按钮用于“第一页”、“上一页”、“下一页”和“最后一页”

我不知道该怎么做的是设计一种机制,通过点击按钮来改变页面

有人有什么想法吗


ETA:为了更好地解释设置,按钮在每个页面的布局中声明,并在PagerAdapter中与布局的其余部分一起充气。我的问题是无法从PagerAdapter中引用ViewPager。或者至少,我想不出一个方法来完成它。

我用这段代码完成了这个项目

yourButton.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View view) {
      yourViewPager.setCurrentItem(page, smoothScroll);
   }
});
vPager = (ViewPager) findViewById(R.id.viewpager);
    View tempView1 = inflater.inflate(R.layout.ani_dialog1, null);
    firstView = (ImageView) tempView1.findViewById(R.id.ani_dialog_next);
    views.add(tempView1);
    firstView.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            vPager.setCurrentItem(1, true);

        }
    }); 
按钮:

Button yourButton = (Button)findViewById(R.id.button1);
    yourButton.setOnClickListener(new OnClickListener() {

     @Override
           public void onClick(View view) {
               mViewPager.setCurrentItem(getItem(+1), true); //getItem(-1) for previous
           }
        });
功能:

private int getItem(int i) {
       return mViewPager.getCurrentItem() + i;
}
希望这有帮助:)

仅此代码在按钮中单击:
@覆盖


getcurrentitem
viewpager
中的实际项目,下一个项目是
currentItem+1

更新代码

Button preButton = (Button)findViewById(R.id.pre_button);
        Button nextButton = (Button)findViewById(R.id.next_button);

        preButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                mViewPager.setCurrentItem(mViewPager.getCurrentItem()-1, true); 


            }
        });

        nextButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                mViewPager.setCurrentItem(mViewPager.getCurrentItem()+1, true); 

            }
        });
1) 布局

      <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="200dp"
                android:background="@color/white"
                android:weightSum="1">



                <android.support.v4.view.ViewPager
                    android:id="@+id/images_pager"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    >
                </android.support.v4.view.ViewPager>

                <ImageView
                    android:id="@+id/img_next"
                    android:layout_width="35dp"
                    android:layout_height="35dp"
                    android:src="@drawable/forward_white"
                    android:background="@color/colorPrimary"
                    android:layout_centerVertical="true"
                    android:layout_alignParentRight="true"
                    android:layout_marginRight="5dp"
                    android:paddingTop="5dp"
                    android:paddingBottom="5dp"
                    />


                <ImageView
                    android:id="@+id/img_previous"
                    android:layout_width="35dp"
                    android:layout_height="35dp"
                    android:src="@drawable/back_white"
                    android:background="@color/colorPrimary"
                    android:layout_centerVertical="true"
                    android:layout_marginLeft="5dp"
                    android:layout_alignParentLeft="true"
                    android:paddingTop="5dp"
                    android:paddingBottom="5dp"/>


            </RelativeLayout>
3) 下一步和上一步按钮

         case R.id.img_previous:
                    mViewPager.setCurrentItem(getItemofviewpager(-1), true);
                    break;

                case R.id.img_next:
                    mViewPager.setCurrentItem(getItemofviewpager(+1), true);
                    break;
4) 做这个功能

  private int getItemofviewpager(int i) {
        return mViewPager.getCurrentItem() + i;
    }
一个无故障升级到和应答

在活动/片段中添加getNextPossibleItemIndex()方法

private int getNextPossibleItemIndex (int change) {

    int currentIndex = viewPager.getCurrentItem();
    int total = viewPager.getAdapter().getCount();

    if (currIndex + change < 0) {
        return 0;
    }

    return Math.abs((currentIndex + change) % total) ;
}
但回到过去,它将在第一项中停止

1 <- 1 <- 2 <- 3
1这样做:

backButton=(Button)findViewById(R.id.back_button);
nextButton=(Button)findViewById(R.id.next_button);
backButton.setVisibility(View.INVISIBLE);//you can use GONE or even disable it. It depends on your layout 


    nextButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View view) {
            viewPager.setCurrentItem(viewPager.getCurrentItem()+1, true);
        }
    });


    backButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View view) {
            viewPager.setCurrentItem(viewPager.getCurrentItem()-1, true);
        }
    });
}
要防止IndexOutOfBoundsException,您应该隐藏并显示以下两个按钮:

    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int i, float v, int i1) {

        }
        @Override
        public void onPageSelected(int position) {
            if(position==0) {
                backButton.setVisibility(View.INVISIBLE);
            }else  {
                backButton.setVisibility(View.VISIBLE);
            }
            if(position < viewPager.getAdapter().getCount()-1 ) {
                nextButton.setVisibility(View.VISIBLE);
            }else  {
                nextButton.setVisibility(View.INVISIBLE);
            }
        }
        @Override
        public void onPageScrollStateChanged(int i) {

        }
    });
viewPager.addOnPageChangeListener(新的viewPager.OnPageChangeListener(){
@凌驾
页面上的公共无效已滚动(整数i、浮点v、整数i1){
}
@凌驾
已选择页面上的公共无效(内部位置){
如果(位置==0){
backButton.setVisibility(视图不可见);
}否则{
设置可见性(View.VISIBLE);
}
如果(位置
首先创建一个接口

public interface OnPageChangedListener {
void OnPageChanged(int position);      }
接下来,使用OnPageChangedListener接口实现您的活动,并执行以下操作

private void setupViewPager(ViewPager viewPager){
    viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
    viewPagerAdapter.addFragment(new Fragment1(this));
    viewPagerAdapter.addFragment(new Fragment2(this));
    viewPagerAdapter.addFragment(new Fragment3(this));
    viewPagerAdapter.addFragment(new Fragment4(this));
    viewPagerAdapter.addFragment(new Fragment5(this));
    viewPagerAdapter.addFragment(new Fragment6(this));
    viewPager.setAdapter(viewPagerAdapter);
}
@Override
public void OnPageChanged(int position) {
    viewPager.setCurrentItem(position);
}
在片段中,使用

private OnPageChangedListener listener;

public Fragment1(OnPageChangedListener listener1) {
    this.listener = listener1;
}
视页雷达

public class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();

public ViewPagerAdapter(FragmentManager manager) {
    super(manager);
}

@Override
public Fragment getItem(int position) {
    switch (position) {
    }
    return mFragmentList.get(position);
}

@Override
public int getCount() {
    return mFragmentList.size();
}

public void addFragment(Fragment fragment) {
    mFragmentList.add(fragment);
}}
public类ViewPagerAdapter扩展了FragmentPagerAdapter{
私有最终列表MFFragmentList=new ArrayList();
公共视图页面编辑器(碎片管理器){
高级经理;
}
@凌驾
公共片段getItem(int位置){
开关(位置){
}
返回MFFragmentList.get(位置);
}
@凌驾
public int getCount(){
返回MFFragmentList.size();
}
公共void addFragment(片段片段){
添加(片段);
}}

希望这对你有帮助

我确实调查过,这是我最初的想法。但是这些按钮是在布局中声明的,这些布局在适配器内部膨胀,适配器不能引用ViewPager对象本身…然后创建一个自定义适配器并将ViewPager作为变量传递?或者最好传递一个自定义事件侦听器。什么是page和smoothScroll?page是您的ViewPager。getCurrentItem+-1,smoothScroll是true。@DennisJaamann您能在回答中告诉我如何做,或者给出一个链接吗?我是noobWhy allways项目1?很好,代码中保留的“/TODO自动生成的方法存根”这将抛出
IndexOutOfBoundsException
s,因为没有检查当前位置。这将抛出
IndexOutOfBoundsException
s,因为没有检查当前位置。这将产生一些问题,您必须将viewPager.getCurrentItem()+1和viewPager.getCurrentItem()-1指定给下一个和上一个片段,而不是1和-1。我有相同的问题(不知道如何从PagerAdapter中引用viewPager),并且接受的答案也不回答这个问题(只使用
mViewPager
,而不指定它是什么)。那你是怎么做到的?嗯。那是四年前的事了,我手头没有密码。我甚至不再为公司工作了,但我想我做了一些事情,比如把MViewPage作为类变量而不是局部变量。我基于2.5示例项目中的一个,所以您可能会找到类似的帮助。做了这件事之后,我升级了项目,使用了4.0版本的东西,这与我记忆中完全不同。不鼓励只使用代码的答案,因为它们不会为未来的读者提供太多信息。请对您编写的内容提供一些解释。ViewPager.getAdapter().getCount()在viewpager2中没有解析?
public interface OnPageChangedListener {
void OnPageChanged(int position);      }
private void setupViewPager(ViewPager viewPager){
    viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
    viewPagerAdapter.addFragment(new Fragment1(this));
    viewPagerAdapter.addFragment(new Fragment2(this));
    viewPagerAdapter.addFragment(new Fragment3(this));
    viewPagerAdapter.addFragment(new Fragment4(this));
    viewPagerAdapter.addFragment(new Fragment5(this));
    viewPagerAdapter.addFragment(new Fragment6(this));
    viewPager.setAdapter(viewPagerAdapter);
}
@Override
public void OnPageChanged(int position) {
    viewPager.setCurrentItem(position);
}
private OnPageChangedListener listener;

public Fragment1(OnPageChangedListener listener1) {
    this.listener = listener1;
}
public class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();

public ViewPagerAdapter(FragmentManager manager) {
    super(manager);
}

@Override
public Fragment getItem(int position) {
    switch (position) {
    }
    return mFragmentList.get(position);
}

@Override
public int getCount() {
    return mFragmentList.size();
}

public void addFragment(Fragment fragment) {
    mFragmentList.add(fragment);
}}