我的应用程序有一个包含三个片段的视图寻呼机。这些由FragmentPagerAdapter
管理。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Fragment page adapter
mainFragmentPagerAdapter = new MainFragmentPagerAdapter(getSupportFragmentManager());
// Set the view pagers adapter
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
viewPager.setAdapter(mainFragmentPagerAdapter);
// Set up the TabLayout using the view pager
TabLayout tabLayout = (TabLayout) findViewById(R.id.fixed_tabs);
tabLayout.setupWithViewPager(viewPager);
}
当所有这些片段都包含可以更新的RecyclerView时,事情开始变得复杂。
为了正确地将数据传递给Fragments,我使用下面显示的newInstance方法:
public static InformationFragment newInstance() {
Bundle arguments = new Bundle();
// Put arguments here.
InformationFragment fragment = new InformationFragment();
fragment.setArguments(arguments);
return fragment;
}
然后我在InformationFragment中有另一个方法来在需要时更新参数:
public void updateData() {
Bundle arguments = getArguments();
// Put arguments
this.adapter.updateItems(items);
}
可用于填充RecyclerView的数据需要具有多种类型(某些Android,某些自定义)。因此,我ArrayList<Object> items;
包含了我的所有对象。
我的问题是,将这个ArrayList存储在一个bundle中的最佳方法是什么,它可以被一个片段使用?
我能够做到以下几点,但感觉很脏:
public void updateData(ArrayList<Object> items) {
getArguments().putSerializable("items", items);
this.adapter.updateItems(items);
}
然后通过以下方式检索:
if (arguments.containsKey("items")) {
ArrayList<Object> items = (ArrayList<Object>)arguments.getSerializable("items");
}
或者有更好的方法吗?
答案 0 :(得分:0)
我建议不要保留List<Object>
,而是将多个列表放入捆绑包中。另外,将对象作为可序列化的对象放入捆绑包中并不是那么糟糕,但如果你想这样做,那么你就可以为这个捆绑包中存储的每个对象实现Parcelable接口。