web-dev-qa-db-ja.com

Android PagerAdapter、現在の位置を取得

PagerAdapterの可視ビューの現在の位置を取得したい

getPosition()のような明白な関数は見当たりませんでした。

オブジェクトをその配列リストのその位置に追加したいのですが、最初にそれを知る必要があります

30
CQM

あなたは使うでしょう:

int position = mViewPager.getCurrentItem()
47
Jona

私にはこの問題があり、getCurrentItem()メソッドを取得できませんでした。

ViewPagerではなくPageAdapterからポジションを取得することになりました。 onPageSelected(int currentPage)メソッドは、現在表示されているページを取得しています。

_//custom PageAdapter implementation
mAdapter = new AwesomePagerAdapter();

//Our custom view pager that extends from ViewPager
mPager = (CustomViewPager) findViewById(R.id.preview_gallery);

mPager.setAdapter(mAdapter);

// get the item that we should be showing from the intent
mCurrentPage = extra.getInt("currentIndex");

// show the item the user picked
mPager.setCurrentItem(mCurrentPage);

// listen for page changes so we can track the current index
mPager.setOnPageChangeListener(new OnPageChangeListener() {

    public void onPageScrollStateChanged(int arg0) {
    }

    public void onPageScrolled(int arg0, float arg1, int arg2) {
    }

    public void onPageSelected(int currentPage) {
        //currentPage is the position that is currently displayed. 
    }

});
_

表示されない画像をプリロードしたいので、PageAdaperでそれを実行してもうまくいきませんでした。 PageAdapter`のinstantiateItem(View collection, int position)に渡される位置は、初期化される次のアイテムの位置です。これは、表示されるアイテムとは関係ありません。

23
philipp

https://github.com/Shereef/ViewPagerPlusExpandableList/blob/master/src/net/shereef/vewpagerplusexpandablelistexample/ViewPagerPlusExpandableListActivity.Java#L204

その行の後に書けば

    Log.i("pager",myPager.getCurrentItem()+"");

常に0であるoncreateの実行中に現在のアイテムページがlogcatに表示されます

注:私はビューページャーのオブジェクトをアダプターではなく、それ自体で使用しています。

3
Shereef Marzouk

これは私が使用した更新済みのソリューションです。 setOnPageChangeListenerは廃止されたため、addOnPageChangeListenerを使用する必要があります。

_viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            int counterPosition;
            if (position == 0 || position <= currentInventory.size()){
                counterPosition = position + 1;
            } else {
                counterPosition = position;
            }

            viewPagerHeader.setText("Prize " + counterPosition + " of " + currentInventory.size());

        }

        @Override
        public void onPageSelected(int position) {

        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });
_

上記の実装では、正しいインデックスがmy TextViewに表示されるため、_0_の位置とlistcurrentInventory.size()の最後の項目が正しく表示されます。これが更新されたソリューションを探している誰かを助けることを願っています。

1
Phil Culver