将不同的列表传递给活动中标记的不同片段

时间:2017-08-04 14:47:33

标签: android android-fragments android-tabs

在我的应用程序中,有一个包含三个选项卡的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类中,此行生成相应数据的覆盖:

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

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

1 个答案:

答案 0 :(得分:1)

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

尝试在循环中移动包创建:

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);
}