Android用ViewPagerの現在のページ番号を取得するにはどうすればよいですか?


84

の現在のページ位置を知りたいViewPager。アダプターを作成し、このアダプターをに設定しViewPagerます。その特定のページでいくつかの追加のイベントを開始したいので、現在のページ番号または現在のビューの位置を知りたいと思います。

viewPager.setCurrentItem(1);最初の項目の設定に使用しました。

現在のページを取得するための同様の方法はありますか?

回答:


180

最新のパッケージでは、

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で働いたことはありますか?
sam_k 2011年

@Necronetいいえ、すべきではありません。PageListenerクラスは、ネストされたクラスではなく、内部クラスである必要があります。
dcow 2013年

ページャー画像の先頭でnullポインターの例外が発生することがありました。より信頼性の高い解決策として、これを提案します。これで問題なく動作します。stackoverflow.com/a/13831450/2296787
MBH 2015

setOnPageChangeListener()は非推奨ですaddOnPageChangeListener()。代わりに使用してください。
ZzZombo

47

object_of_ViewPager.getCurrentItem()ビューページャーの現在表示されているページの位置を返すメソッドがあります


私は実際にこの回答を最初に@ChuckBorisに投稿しましたが、それでもこれはより多くの票を集め、明らかに支持を得ているようです。奇妙なのはこのサイトの方法です:)
devanshu_kaushik 2016

17

位置だけが必要な場合vp.getCurrentItem()は、それを提供します。その目的だけでonPageChangeListener()を適用する必要はありません。


8

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) {

    }
});

7

この問題の場合、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();
        }
    });

1
setOnPageChangeListenerは非推奨です。setOnPageChangeListenerの代わりにaddOnPageChangeListenerを使用します。
セリン2016年

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

5

viewpager.iにはすでにAPIをチェックしたメソッドgetCurrentItem()はありません


3
Android SDK Managerで互換性パッケージを更新する必要があります。そうすれば、そのメソッドを取得できます。
krisDrOid 2012

5

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();
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.