【问题标题】:Passing different lists to different fragment tabbed in the activity将不同的列表传递给活动中选项卡的不同片段
【发布时间】:2018-01-12 13:36:19
【问题描述】:

在我的应用中有一个带有三个选项卡的 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) 的值传递给片段,为了在片段中选择正确的数据元素,它也会被覆盖。 我该如何解决这个问题? 提前谢谢你

【问题讨论】:

    标签: android android-fragments android-tabs


    【解决方案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);
    }
    

    【讨论】:

    • 你是对的,多么愚蠢的错误。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    相关资源
    最近更新 更多