如何在viewpager的片段中获取当前页面索引?

How to get current page index in fragment of viewpager?

我的应用是一个像应用抽屉一样的图标视图

每页有12个图标,如果超过12个图标,其他图标将在下一页显示。

我用viewpager和gridview来实现这个接口,viewpager的每个fragment都有一个gridview来展示item。

在FragmentActivity中,我可以通过给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) {

    }
});

但是我无法获取片段中的索引

public class MyFragment extends Fragment {

    public static final String EXTRA_MESSAGE = "EXTRA_MESSAGE";

    public static final MyFragment newInstance(String message)
    {
        MyFragment f = new MyFragment();
        Bundle bdl = new Bundle(1);
        bdl.putString(EXTRA_MESSAGE, message);
        f.setArguments(bdl);
        return f;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        String message = getArguments().getString(EXTRA_MESSAGE);
        View v = inflater.inflate(R.layout.fragment, container, false);

        //suppose the list has 15 items now
        ArrayList list=new ArrayList();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        list.add(6);
        list.add(7);
        list.add(8);
        list.add(9);
        list.add(10);
        list.add(11);
        list.add(12);
        list.add(13);
        list.add(14);
        list.add(15);

        GridView gridview = (GridView) v.findViewById(R.id.gridview);

        int currentIndex=??? //how to get index?

        if(currentIndex==0){
            gridview.setAdapter(new GridViewAdapter(list.subList(0,12));
        } else if (currentIndex==1) {
            gridview.setAdapter(new GridViewAdapter(list.subList(12,15));
        }

        return v;
    }


}

不同页面的片段应该显示不同的项目子列表,如何获取片段中的索引?

创建 FragmentPagerAdapter 时必须重写一个名为 getItem(int position) 的方法。你可以在那里传递索引。

既然你有这个:

public static final MyFragment newInstance(String message) { MyFragment f = new MyFragment(); Bundle bdl = new Bundle(1); bdl.putString(EXTRA_MESSAGE, message); f.setArguments(bdl); return f; }

您可以将索引放在 bdl 中,稍后在 onCreate() 中获取它

您应该在您的片段中获取对 viewPager 的引用并阅读它。

viewPager.getCurrentItem()

http://developer.android.com/reference/android/support/v4/view/ViewPager.html#getCurrentItem%28%29