gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:04:08 25 4
gpt4 key购买 nike

在我的申请中,我必须在 ViewPager 中显示学生详细信息.我使用了一个 fragment (比如说 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()方法,我在那里填充前 3 个 Student 对象。如果我们滑动下一页,相同的 fragment 应该调用显示的接下来的 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 个学生的详细信息。请提供执行此操作的最佳方法。

最佳答案

Now my problem is all the pages holds first 3 student details.

如果发生这种情况,您的 displayStudentDetails() 方法很可能只获取您经常看到的前三个学生详细信息,而没有考虑位置(以及随附的学生详细信息ViewPagerFragment 的那个位置)。由于您没有发布方法,因此我无法推荐解决方案。

I have maintained a common ArrayList object which holds all the student objects.

您在哪里执行此操作以及如何存储该列表?

f = StudentPageFragment.newInstance(_context);

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

你应该像这样构建 fragment :

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

关于android - 如何对 ViewPager 中的所有页面使用单个 Fragment?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15195000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com