如何对ViewPager中的所有页面使用单个Fragment?

时间:2013-03-04 05:16:10

标签: android android-fragments android-viewpager android-pageradapter

在我的申请表中,我必须在ViewPager中显示学生详细信息。我使用了一个片段(比如StudentPageFragment),我在onCreateView()中编写小部件初始化代码,如:

public static Fragment newInstance(Context context) {
    StudentPageFragment f = new StudentPageFragment();
    return f;
}

public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    ViewGroup root = (ViewGroup) inflater.inflate(R.layout.stud_list_page,
            null);
    // initialize all widgets here
    displayStudentDetails();
    return root;
}

protected void displayStudentDetails() {
    ArrayList<Student>studList = User.getStudentsList();
    if (studList != null) {
        int loc = (pageIndex * 3);
        for (int i = 0; i < 3; i++) {
            if (loc < studList.size()) {
                // populate data in view
            }
            loc++;
        }
    }
}

我维护了一个包含所有学生对象的公共ArrayList<Student>对象。

displayStudentDetails()方法中,我填充了前三个Student对象。如果我们滑动下一页,则相同的片段应该调用显示的下一个3个学生对象。

ViewPagerAdapter班:

@Override
public Fragment getItem(int position) {
    Fragment f = new Fragment();
    f = StudentPageFragment.newInstance(_context);
    StudentPageFragment.setPageIndex(position);
    return f;
}

@Override
public int getCount() {
    return User.getPageCount();// this will give student list size divided by 3
}

现在我的问题是所有页面都包含前3个学生的详细信息。请告诉我最好的方法。

1 个答案:

答案 0 :(得分:3)

  

现在我的问题是所有页面都包含前3个学生的详细信息。

如果发生这种情况,很可能您的displayStudentDetails()方法只会获得您一直看到的前三个学生详细信息,并且不会考虑该职位的位置(以及该职位附带的学生详细信息) Fragment中的ViewPager。由于你没有发布方法,我不推荐解决方案。

  

我维护了一个包含所有内容的公共ArrayList对象   学生反对。

你在哪里这样做,你如何存储该列表?

  

f = StudentPageFragment.newInstance(_context);

请不要将Context传递给您的片段,因为Fragment类通过Context方法引用了Activity / getActivity()你应该改用。

您应该像这样构建片段:

@Override
public Fragment getItem(int position) {
    return StudentPageFragment.newInstance(position);
}

newInstance()方法的位置:

public static Fragment newInstance(int position) {
      StudentPageFragment f = new StudentPageFragment();
      Bundle args = new Bundle();
      args.putInt("position", position);
      f.setArguments(args); 
      return f;
}

然后,您将检索position并在Fragment

中使用它
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    ViewGroup root = (ViewGroup) inflater.inflate(R.layout.stud_list_page,
            container, false);
    // initialize all widgets here        
    displayStudentDetails(getArguments().getInt("position"));
    return root;
}

displayStudentPosition中,您可以获得如下值:

protected void displayStudentDetails(int position) {
        ArrayList<Student>studList = User.getStudentsList();
        if (studList != null) {
        for (int i = position; i < 3 && i < studList.size; i++) {
             // populate data
        } 
        } 
}