[英]How to use single Fragment for all the pages in the ViewPager?
在我的应用程序中,我必须在ViewPager
显示学生详细信息。 我使用了一个片段(比如StudentPageFragment
),我在onCreateView()
编写widget初始化代码,如:
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个Student对象。
在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个学生的详细信息。 请告诉我最好的方法。
现在我的问题是所有页面都包含前3个学生的详细信息。
如果发生这种情况,很可能您的displayStudentDetails()
方法只获得您一直看到的前三个学生详细信息,并且不考虑ViewPager
Fragment
的位置(以及该位置附带的学生详细信息)。 由于您没有发布该方法,因此我无法推荐解决方案。
我维护了一个包含所有学生对象的公共ArrayList对象。
你在哪里这样做,你如何存储该列表?
f = StudentPageFragment.newInstance(_context);
请不要将Context
传递给您的片段,因为Fragment
类通过您应该使用的getActivity()
方法引用Context
/ Activity
。
您应该像这样构建片段:
@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
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.