获取ViewPager在第一个和最后一个可见片段上的位置

时间:2015-02-18 15:36:40

标签: android

我在我的应用中实现了ViewPager以在片段之间滑动。经过长时间的研究,我发现如果我想获得可见片段的位置,我应该使用:

mViewPager.getCurrentItem();

但出于某种原因,当我在第一个或最后一个片段时,位置不会改变。它在第一个片段上保持为1,而不是0,分别为大小 - 2为最后一个,而不是大小 - 1.(对于第一个片段,该理论仅适用于我从一个ViewPager开始与第一个不同的位置)

如何获取ViewPager的第一个和最后一个位置。我甚至试图从ViewPagerAdapter发送位置,但在这里我处理相同的事情,因为最后一次更改位置发生在第一个或最后一个片段之前。

有什么建议吗?

4 个答案:

答案 0 :(得分:1)

在YourPagerActivity.class中,在create method

中添加侦听器
    viewPager = (ViewPager) findViewById(R.id.view_pager);
    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            String positions=position + "";

            Toast.makeText(YourPagerActivity.this, positions, Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        }

        @Override
        public void onPageScrollStateChanged(int state) {
        }
    });

答案 1 :(得分:0)

你不能把监听器放到片段上。 将setOnPageChangeListener放入YourPagerActivity.class中的oncreate方法

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_reklamapager);


         new yourAdapterAsync().execute();

    viewPager = (ViewPager) findViewById(R.id.view_pager);
    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageSelected(int position) {
        String positions=position + "";

        Toast.makeText(YourPagerActivity.this, positions, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    }

    @Override
    public void onPageScrollStateChanged(int state) {
    }
});

  }

并在yourAdapterAsync set startposition

的onpostexecute中
protected void onPostExecute(String file_url) {
            // dismiss the dialog 
            pDialog.dismiss();

            // updating UI from Background Thread
                runOnUiThread(new Runnable() {
                public void run() {

                    ImageAdapterFromRes adapter = new ImageAdapterFromRes(YourPagerActivity.this, textArray, urlArray, bitmapArray );
                    viewPager.setAdapter(adapter);

                    viewPager.setCurrentItem(startposition);

                }
            });

答案 2 :(得分:0)

ViewPager.setOnPageChangeListener现已弃用。需要使用ViewPager.addOnPageChangeListener代替。

例如,

ViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {

        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

<强> REFRENCE

答案 3 :(得分:0)

oncreate     
 leftNav.setVisibility(View.GONE);

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                Log.e("pos","pos "+position);
                if (position == 0) {
                    leftNav.setVisibility(View.GONE);
                    rightNav.setVisibility(View.VISIBLE);
                }else if (position == 5) { //inplace of 5 u can use your dynmic value
                    leftNav.setVisibility(View.VISIBLE);
                    rightNav.setVisibility(View.GONE);
                }else if (position > 0 || position <5){
                    leftNav.setVisibility(View.VISIBLE);
                    rightNav.setVisibility(View.VISIBLE);
                }
            }

            @Override
            public void onPageSelected(int position) {
                Log.e("poss","poss "+position);

            }

            @Override
            public void onPageScrollStateChanged(int state) {
                Log.e("possss","posssss "+state);
            }
        });