Sri*_*har 5 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++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我维护了一个通用ArrayList<Student>对象,其中包含所有学生对象。
在displayStudentDetails()方法中,我填充了前 3 个 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
}
Run Code Online (Sandbox Code Playgroud)
现在我的问题是所有页面都包含前 3 个学生详细信息。请为我提供最好的方法来做到这一点。
现在我的问题是所有页面都包含前 3 个学生详细信息。
如果发生这种情况,您的displayStudentDetails()方法很可能只获取您不断看到的前三个学生详细信息,而没有考虑 中的职位(以及该职位附带的学生详细信息Fragment)ViewPager。由于您没有发布方法,我无法推荐解决方案。
我维护了一个通用的 ArrayList 对象,其中包含所有学生对象。
您在哪里执行此操作以及如何存储该列表?
f = StudentPageFragment.newInstance(_context);
请不要将 传递Context给您的片段,因为该类通过您应该使用的方法Fragment引用了Context/ 。ActivitygetActivity()
您应该像这样构建片段:
@Override
public Fragment getItem(int position) {
return StudentPageFragment.newInstance(position);
}
Run Code Online (Sandbox Code Playgroud)
该newInstance()方法将是:
public static Fragment newInstance(int position) {
StudentPageFragment f = new StudentPageFragment();
Bundle args = new Bundle();
args.putInt("position", position);
f.setArguments(args);
return f;
}
Run Code Online (Sandbox Code Playgroud)
然后,您将检索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;
}
Run Code Online (Sandbox Code Playgroud)
在中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
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4127 次 |
| 最近记录: |