如何知道ViewPager中当前选择的片段?

时间:2012-09-29 07:26:37

标签: android android-fragments android-viewpager

我使用加载了片段的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

6 个答案:

答案 0 :(得分:4)

由于confucius发布的代码,对我来说不起作用。我修改了一下。

问题是不是你的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 MikeT

答案 1 :(得分:2)

FragmentPagerAdapter adapter = (FragmentPagerAdapter) mViewPager.getAdapter();
((IFieldServiceFragment) adapter.getItem(mViewPager.getCurrentItem()))
                .updateFragment();

您可以从ViewPager获取当前项目的索引,然后从适配器获取该项目(片段)。

答案 2 :(得分:2)

只需使用ViewPager.getCurrentItem()即可将其返回给您。

答案 3 :(得分: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();

答案 4 :(得分:0)

以下是我选择片段时如何获得回调

重写FragmentStatePagerAdapter的方法setPrimaryItem,每次选择新片段时都会调用它。 Object参数是你的片段,所以其余的很容易。

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

当然,实现了片段的custon接口

public class YourFragment extends Fragment implements UpdateWhenSelected  {

    ...
    public void update() {
        //code
    }
}

答案 5 :(得分:0)

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

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

ViewPager.OnPageChangeListener