4

我使用加载了片段的 ViewPager,我想知道当前在 viewpager 中显示或选择了哪个片段。

每个片段的onResume()方法都会执行一些逻辑,因此当当前所选页面的相邻片段(左和右)也被实例化时,我会遇到问题。

更新:

片段在实际被选中时是否会收到任何回调

ViewPager 适配器代码:

public class LeftPanelPagerAdapter extends FragmentStatePagerAdapter
 {
private List<Fragment> fragments;

public LeftPanelPagerAdapter(FragmentManager fm,List<Fragment> fragments) 
{
    super(fm);
    this.fragments = fragments;

}

@Override
public Fragment getItem(int position) 
{
    return this.fragments.get(position);
}

@Override
public int getCount() 
{

    return this.fragments.size();
}

@Override
public int getItemPosition(Object object) 
{
    return POSITION_NONE;
}
@Override
4

6 回答 6

4

由于孔子发布的代码对我不起作用。我稍微修改了一下。

问题是您的 FragmentStatePagerAdapter 不应该实现 OnPageChangeListener,而是 Activity 本身。您应该为包含您的 LeftPanelPagerAdapter 的 mPager 设置一个侦听器。

public class ImageDetailActivity extends Activity implements OnPageChangeListener

@Override
public void onCreate(Bundle savedInstanceState)
{
    mPager = (ViewPager) findViewById(R.id.pager);
    mPager.setAdapter(mAdapter);
    mPager.setOnPageChangeListener(this);
....
}

br 迈克

于 2013-06-06T14:05:57.850 回答
3

只需使用ViewPager.getCurrentItem()它,它就会将其位置返回给您。

于 2014-05-08T09:58:15.567 回答
2
FragmentPagerAdapter adapter = (FragmentPagerAdapter) mViewPager.getAdapter();
((IFieldServiceFragment) adapter.getItem(mViewPager.getCurrentItem()))
                .updateFragment();

您可以从 ViewPager 中获取当前项的索引,然后从 Adapter 中获取该项(Fragment)。

于 2013-11-11T14:40:43.453 回答
1

您可以在适配器https://developer.android.com/reference/android/support/v4/view/ViewPager.html#getCurrentItemViewPager.getCurrentItem()
获取片段的当前位置(

要在 viewpager 更改片段时获取事件,您可以使用ViewPager.OnPageChangeListener

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

        }
    });
于 2018-01-19T04:52:26.060 回答
0
public class LeftPanelPagerAdapter extends FragmentStatePagerAdapter implements OnPageChangeListener{
        .....
        .....
        ....

private int currentSelectedFragmentPosition = 0; 
    public void onPageScrollStateChanged(int arg0) {
        // TODO Auto-generated method stub

    }

    public void onPageScrolled(int arg0, float arg1, int arg2) {
        // TODO Auto-generated method stub

    }

    public void onPageSelected(int arg0) {
        currentSelectedFragmentPosition = arg0;

    }

    public int getCurrentSelectedFragmentPosition() {
        return currentSelectedFragmentPosition;
    }



}

您可以实现OnPageChangeListener并添加一个成员变量,该变量可用于跟踪当前选定的片段位置。

任何时候您想知道当前选择的片段是什么时,请执行此操作

myAdapter.getCurrentSelectedFragmentPosition();
于 2012-09-29T08:17:29.640 回答
0

这是我在选择片段时获得回调的方式

覆盖 FragmentStatePagerAdapter 的方法 setPrimaryItem,每次选择新片段时都会调用该方法。Object 参数是你的 Fragment,所以剩下的就很简单了。

mViewPager = (ViewPager) findViewById( R.id.view_pager );
mViewPager.setAdapter( new FragmentStatePagerAdapter(manager) {
            @Override
            public void setPrimaryItem(ViewGroup container, int position, Object object) {
                if (object instanceof UpdateWhenSelected) {
                    ((UpdateWhenSelected) object).update();
                }
                super.setPrimaryItem(container, position, object);
            }
            @Override
            public Fragment getItem(int position) {
                        //your code here
                        return ***;
                    }
                } return getItem( position );
            }
            @Override
            public int getCount() { return ***; }
        });

并且,当然,为您的片段实现自定义接口

public class YourFragment extends Fragment implements UpdateWhenSelected  {

    ...
    public void update() {
        //code
    }
}
于 2018-01-19T04:46:41.333 回答