【发布时间】:2023-03-16 09:32:01
【问题描述】:
我有一个使用 viewpager 和带有标签的片段的 Activity。我将数据从活动传递到片段,但它总是显示特定选项卡的错误数据。我有一个片段应该根据通过包传递的参数查询数据。
private Fragment createFragment(String title){
HomeFragment fragment = new HomeFragment();
Bundle bundle = new Bundle();
bundle.putString("category",title);
fragment.setArguments(bundle);
return fragment;
}
然后我像这样在 viewpager 上传递这个函数:
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFragment(createFragment("Item 1"),"Tab 1");
adapter.addFragment(createFragment("Item 2"),"Tab 2");
adapter.addFragment(createFragment("Item 3"),"Tab 3");
adapter.addFragment(createFragment("Item 4"),"Tab 4");
adapter.addFragment(createFragment("Item 5"),"Tab 5");
最后我得到的参数是这样传递的:
String argument = this.getArguments().getString("category");
问题是当我在选项卡 1 上时,它返回项目 2。但是当我访问所有选项卡时,它开始返回正确的项目,即在选项卡 1 上的项目 1。
问题出在哪里?
编辑:
ViewPagerAdapter:
public class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> fragList = new ArrayList<>();
private final List<String> titleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return fragList.get(position);;
}
public void addFragment(Fragment fragment, String title) {
fragList.add(fragment);
titleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return titleList.get(position);
}
@Override
public int getCount() {
return fragList.size();
}
}
【问题讨论】: