【问题标题】:How to get position of first and last position of viewpager?如何获取viewpager的第一个和最后一个位置?
【发布时间】:2018-08-18 12:30:22
【问题描述】:

我想在 ViewPager 的第一个位置隐藏左箭头,在 ViewPager 的最后一个位置隐藏右箭头。然后,我还想用 TextView 显示当前页码(5/30)。 5 是当前页码,30 是总页码。谢谢楼主。

这是我的代码;

mPager.beginFakeDrag();
leftNav = (ImageButton) findViewById(R.id.left_nav);
rightNav = (ImageButton) findViewById(R.id.right_nav);
txt_count = (ImageButton) findViewById(R.id.txt);

int tab = mPager.getCurrentItem();
if (tab == 0){
    leftNav.setVisibility(View.GONE); // hide all position :(
}

leftNav.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        int tab = mPager.getCurrentItem();
        if (tab > 0) {
            tab--;
            mPager.setCurrentItem(tab);
        } else if (tab == 0) {
            mPager.setCurrentItem(tab);
        }
    }
});

rightNav.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        int tab = mPager.getCurrentItem();
        tab++;
        mPager.setCurrentItem(tab);
    }
});

【问题讨论】:

    标签: android count textview


    【解决方案1】:

    你可以使用:

    viewPager.getCurrentItem()
    
    ViewPager.getAdapter().getCount() The getAdapter() method returns the object that supplies the pages for the ViewPager.
    

    【讨论】:

      【解决方案2】:

      如下图添加onPageChangeListener

       mPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                          @Override
                          public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
      
                          }
      
                          @Override
                          public void onPageSelected(int position) {
                             if (position == (mPager.getAdapter().getCount() - 1)) {
                                  rightNav.setVisibility(View.GONE);
                             } else {
                                  rightNav.setVisibility(View.VISIBLE);
                             }
      
                             if (position == 0) {
                                  leftNav.setVisibility(View.GONE);
                             } else {
                                  leftNav.setVisibility(View.VISIBLE);
                             }
                          }
      
                          @Override
                          public void onPageScrollStateChanged(int state) {
      
                          }
                      });
      

      左右箭头按钮的点击监听器

       leftNav.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      if (mPager.getAdapter() != null && mPager.getAdapter().getCount() != null && mPager.getCurrentItem() != 0) {
                          mPager.setCurrentItem(mPager.getCurrentItem() - 1);
                      }
                  }
              });
              rightNav.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      if (mPager.getAdapter() != null && mPager.getAdapter().getCount() != null && mPager.getCurrentItem() != (mPager.getAdapter().getCount() - 1)) {
                          mPager.setCurrentItem(mPager.getCurrentItem() + 1);
                      }
                  }
              });
      

      【讨论】:

      • @StevenLin 使用左右箭头按钮单击侦听器检查我编辑的答案
      • 调试和比较位置,mPager.getAdapter().getCount();如果不使用 yourArrayList.size() 来获得相同的大小,则返回正确的大小
      • 不 :D 它不会发生.. 第一次左箭头不隐藏并继续下一步.. 右箭头不隐藏并返回.. 左箭头隐藏并下一步.. . 右箭头不隐藏 mPager.getAdapter().getCount() != null 运算符不能应用于 int
      • 对不起我的错误,我已经改变了 onPageSelected() 代码请比较一下
      • 第一次首页左箭头不隐藏,以后返回隐藏。为什么?我更改 mPager.getAdapter().getCount() > 0 因为 != 不能应用于 int
      【解决方案3】:

      要获取ViewPager 中的所有页数,请使用viewPager.getAdapter() 的getAdapter 方法

      viewPager.getAdapter().getCount()
      

      要查找ViewPager 的当前页面,请使用ViewPager.getCuurentItem()

      viewPager.getCurrentItem()
      

      【讨论】:

        【解决方案4】:

        使用OnPageChangeListener

        mPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            public void onPageScrollStateChanged(int state) {
            }
        
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            }
        
            public void onPageSelected(int position) {
                if(position == 0)
                {
                    // hide left nav
                }
                else if(position == mPager.getAdapter().getCount() - 1) // is last position
                {
                    // hide right nav
                }
                else
                {
                    // show all nav
                }
            }
        }
        

        参考

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-06
          • 2016-01-18
          相关资源
          最近更新 更多