【问题标题】:How do you get the current page number of a ViewPager for Android?您如何获取 Android 版 ViewPager 的当前页码?
【发布时间】:2011-11-14 05:00:02
【问题描述】:

我想知道ViewPager 的当前页面位置。我创建了一个适配器并将这个适配器设置为ViewPager。现在我想知道当前视图的当前页码或位置,因为我想在该特定页面上启动一些额外的事件。

我使用viewPager.setCurrentItem(1); 设置第一项。

有没有类似的获取当前页面的方法?

【问题讨论】:

    标签: android android-viewpager


    【解决方案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;
            }
        }
    

    【讨论】:

    • 非常感谢..它的作品..你以前在 ViewPager 上工作过吗?
    • @Necronet 不,不应该。 PageListener 类应该是内部类,而不是嵌套类。
    • 有时在寻呼机图像的开头出现空指针异常,对于更可靠的解决方案,我建议这样做,它对我来说很好。 stackoverflow.com/a/13831450/2296787
    • setOnPageChangeListener() 已弃用,请改用addOnPageChangeListener()
    【解决方案2】:

    有一个方法object_of_ViewPager.getCurrentItem()返回view pager当前查看页面的位置

    【讨论】:

    • 我实际上首先发布了这个答案@ChuckBoris,但这个答案似乎已经获得了更多的选票,显然是一种认可。这个网站的方式很奇怪:)
    【解决方案3】:

    如果你只想要这个职位,vp.getCurrentItem() 会给你,不需要单独为这个目的应用 onPageChangeListener()。

    【讨论】:

      【解决方案4】:

      你会发现 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) {
      
          }
      });
      

      【讨论】:

        【解决方案5】:

        对于这个问题 Onpagechange 监听器是最好的,但是它也会有一个小错误,它不会检测到第 0 个位置的开始时间一旦你改变页面它会开始检测页面选择的位置.. .对于这个问题,我找到了最简单的解决方案

        1.您必须保持选定的位置值然后使用它....
        2.案例1:起始位置始终为零....
        案例 2:假设如果您设置当前项目意味着您将该值设置为保持位置
        3.然后在您的活动中使用该维护来执行您的操作...

        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();
                }
            });
        

        【讨论】:

        • setOnPageChangeListener 已弃用。使用 addOnPageChangeListener 而不是 setOnPageChangeListener。
        【解决方案6】:

        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;
        }
        

        【讨论】:

          【解决方案7】:

          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();
          

          【讨论】:

            【解决方案8】:

            viewpager 中没有任何方法 getCurrentItem()。我已经检查过 API

            【讨论】:

            • 你必须在Android SDK Manager中更新兼容包,然后你才能得到那个方法。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-08-05
            • 2022-12-14
            • 1970-01-01
            • 1970-01-01
            • 2013-05-10
            • 2014-03-22
            • 1970-01-01
            相关资源
            最近更新 更多