将不同的列表传递给 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);
}
在我的应用程序中有一个 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);
}