你如何获得ViewPager for Android的当前页码?
我想知道ViewPager
的当前页面位置。 我创build一个适配器并将此适配器设置为ViewPager
。 现在我想知道当前页面编号或当前视图的位置,因为我想在该特定页面上启动一些额外的事件。
我用viewPager.setCurrentItem(1);
设置第一项。
有没有类似的方法来获取当前页面?
在最新的软件包,你也可以使用
vp.getCurrentItem()
要么
vp是viewPager,
pageListener = new PageListener(); vp.setOnPageChangeListener(pageListener);
你必须为你的viewPager放置一个页面改变监听器。 viewPager没有获取当前页面的方法。
private int currentPage; private static class PageListener extends SimpleOnPageChangeListener{ public void onPageSelected(int position) { Log.i(TAG, "page selected " + position); currentPage = position; } }
有一个方法object_of_ViewPager.getCurrentItem()
,它返回当前正在浏览的页面浏览器的位置
如果你只想要这个位置, vp.getCurrentItem()
会给你,不需要为此目的单独应用onPageChangeListener()。
对于这个问题Onpagechange监听器是最好的但它也会有一个小的错误,它不会检测到第0个位置的开始时间一旦您将更改页面,它将开始检测页面选定的位置…为此问题我来自最简单的解决scheme
1.你必须保持选定的位置值,然后使用它….
2.案例1:在开始的位置总是零….
情况2:假设您设置了当前项目,则表示您将该值设置为维持位置
然后用你在活动中使用的动作做你的动作…
Public int maintain=0; myViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int i, float v, int i2) { //Toast.makeText(MyActivity.this, i+" Is Selected "+data.size(), Toast.LENGTH_SHORT).show(); } @Override public void onPageSelected( int i) { // here you will get the position of selected page maintain = i; } @Override public void onPageScrollStateChanged(int i) { } }); updateButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MyActivity.this, i+" Is Selected "+data.size(), Toast.LENGTH_SHORT).show(); data.set(maintain, "Replaced "+maintain); myViewPager.getAdapter().notifyDataSetChanged(); } });
getCurrentItem()
,实际上并没有给第一个和最后一个页面的正确位置我修复它添加此代码:
public void CalcPostion() { current = viewPager.getCurrentItem(); if ((last == current) && (current != 1) && (current != 0)) { current = current + 1; viewPager.setCurrentItem(current); } if ((last == 1) && (current == 1)) { last = 0; current = 0; } display(); last = current; }
你会发现setOnPageChangeListener已被弃用,使用addOnPageChangeListener,如下所示:
ViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { if(position == 1){ // if you want the second page, for example //Your code here } } @Override public void onPageScrollStateChanged(int state) { } });
viewpager.i中没有任何方法getCurrentItem()已经检查了API
setOnPageChangeListener()方法已被弃用。 改用addOnPageChangeListener(OnPageChangeListener) 。
您可以使用OnPageChangeListener并获取onPageSelected()
方法内的位置,这是一个示例:
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { Log.d(TAG, "my position is : " + position); } @Override public void onPageScrollStateChanged(int state) { } });
或者使用getCurrentItem()来获得真实的位置:
viewPager.getCurrentItem();