【发布时间】:2014-03-02 04:36:36
【问题描述】:
我正在尝试在 android 中使用 viewpager 和新的标签设计(新的 11+)。我看到在示例中,setArgument/getArguments 用于将信息传递给 Fragment。
我想传递一个对象(大小合适的对象)。我想知道,为什么不调用 setter 来避免序列化等等?
例如
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
Fragment fragment = new DummySectionFragment();
fragment.setMyCustomInfo(myObject); // method I created to set info
return fragment;
}
代替:
公共类 SectionsPagerAdapter 扩展 FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
Fragment fragment = new DummySectionFragment();
fagment.setMyCustomInfo(myObject);
args.putSerializable("Serial", myObject);
fragment.setArguments(args);
return fragment;
}
【问题讨论】:
-
为什么不调用 setter 来避免序列化等等 - 因为您需要注意在适当的时间调用该 setter(比如在轮换之后) ,无论配置发生什么变化,参数都将始终可用。如果数据对象很大,您可以通过让片段直接从活动中检索数据来避免使用参数(我不知道这是否是您要问的)。
-
完美。是的,我如何直接从我的活动中检索数据?通过 setter 传递对我的活动的引用并从该引用中检索数据。然后我们回到 setter 问题。
-
获取对
Activity(getActivity()) 的引用,然后对其调用一些方法来检索数据。这实际上不是一个设置器,其想法是避免在片段上创建Activity调用设置器(这意味着首先找到它们(这对于ViewPager的片段来说更棘手))。如果片段在内部管理这部分,您将确保在实际需要时将数据传递给正确的片段。 -
谢谢.. 将其添加为答案,我会接受它:)