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

时间:2015-07-14 06:57:30

标签: android android-fragments android-viewpager android-gridview

我的应用是app app的图标视图

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

我使用viewpager和gridview来实现这个接口,viewpager的每个片段都有一个gridview来显示项目。

在FragmentActivity中,我可以通过将OnPageChangeListener添加到viewpager来获取当前页面索引。

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


}

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

2 个答案:

答案 0 :(得分:2)

在创建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()

中获取

答案 1 :(得分:0)

您应该在片段中引用viewPager并阅读它。

viewPager.getCurrentItem()

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