Android PagerAdapter, get current position

2019-02-05 16:11发布

I want to get the current position of the visible view of my PagerAdapter

I didn't see an obvious function like getPosition() and I want one.

I want to add an object into its arraylist at that position, but I need to know it first

4条回答
兄弟一词,经得起流年.
2楼-- · 2019-02-05 16:42

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

if i write after that line

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

it will show in the logcat the current item page while the oncreate is being run which is always 0

noteice i have used the object for the viewpager it self not the adapter.

查看更多
贪生不怕死
3楼-- · 2019-02-05 16:47

Here's an updated solution that I used myself. Since setOnPageChangeListener is now deprecated you must use 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) {

        }
    });

The implementation above displays the correct index in my TextView so that positions 0 and the last item in the listcurrentInventory.size() display correctly. Hope this helps someone looking for an updated solution.

查看更多
beautiful°
4楼-- · 2019-02-05 16:57

You would use:

int position = mViewPager.getCurrentItem()
查看更多
戒情不戒烟
5楼-- · 2019-02-05 17:01

I had this problem and could not get the getCurrentItem() methode.

I ended up getting the position from the ViewPager and not from the PageAdapter. The onPageSelected(int currentPage) methode is getting the currently displayed page.

//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. 
    }

});

Doing it in the PageAdaper didn't work for me as I want to preload images that are not visible. The position that is passed instantiateItem(View collection, int position) of the PageAdapter` is the position of the next item initialized. This has nothing to do with the item that is displayed.

查看更多
登录 后发表回答