将不同的列表传递给 activity 中选项卡式的不同片段

Passing different lists to different fragment tabbed in the activity

在我的应用程序中有一个 Activity 包含三个选项卡,每个选项卡都包含一个 ListFragment。 ListFragment 必须显示不同的内容,但是当我通过包传递它时,它会被覆盖,我得到三个内容相同的片段(最新的一个) 这是代码:

在Activity的onCreate方法中:

{...  
Fragment fragment;
Bundle bundle= new Bundle();
for(int i = 0; i<CATEGORIES.size(); i++) {

        fragment = new MyListFragment();
        bundle.putSerializable("Data", data.get(i));
        fragment.setArguments(bundle);
        screens.put(CATEGORIES.get(i),fragment);
}
  setUpViewPagerAndTabs();
    ...
    ... }

 protected void setUpViewPagerAndTabs(){
    mViewPager = (ViewPager) findViewById(R.id.viewpager);
    mViewPager.setOffscreenPageLimit(screens.size()+1);
    mAdapter = new PageAdapter(screens, getSupportFragmentManager());
    mViewPager.setAdapter(mAdapter);

    tabs = (TabLayout) findViewById(R.id.tabs);
    tabs.setTabGravity(TabLayout.GRAVITY_FILL);
    tabs.setTabMode(TabLayout.MODE_FIXED);
    tabs.setupWithViewPager(mViewPager);
}

在Fragment中class这一行产生对应数据的覆盖:

 ArrayList<String> names = (ArrayList<String>) 
   b.getSerializable(Activity.DATA);

即使我尝试将计数器 (i) 的值传递给片段,以便在片段中选择正确的数据元素,它也会被覆盖。 我该如何解决这个问题? 提前谢谢你

不确定是不是这样。但是,您将对同一个包的引用(超出范围)传递给所有三个片段。这可能取决于序列化/反序列化何时生效,但如果它发生在循环之后,您有三个片段指向包的相同内容(最后一个)。

尝试将包创建移动到循环内:

for(int i = 0; i<CATEGORIES.size(); i++) {
    Bundle bundle= new Bundle();
    fragment = new MyListFragment();
    bundle.putSerializable("Data", data.get(i));
    fragment.setArguments(bundle);
    screens.put(CATEGORIES.get(i),fragment);
}