我有 5 个片段ViewPager
用于逐步用多个字段填充业务对象,在每一步中都会设置其中一些字段。我读过很多关于片段之间通信的文章,但我对其他人喜欢的方式感到不舒服,所以在考虑我应该如何在我的情况下做到这一点之后,最后我开始考虑使用所有片段都可以轻松访问的单例模型对象到其字段并按照特定步骤填写它们。
由于我是 Android 新手,我想听听专家关于使用单例而不是在片段之间传递数据(例如实现的接口)的信息(它看起来如此复杂且难以维护)。任何建议都会有所帮助。
虽然单例方法似乎很容易实现和理解,但它并不是实现您所需的最佳方法。原因之一是您的模型对象或您所说的业务对象位于活动上下文之外,这可能会产生难以发现的错误。例如。万一系统创建了多个活动类实例,并且都保留对您的单例的引用。看看你是如何失去对物体的追踪的?
我要做的是
- 使我的模型对象得以实现Parcelable https://developer.android.com/reference/android/os/Parcelable.html一开始你会讨厌它,但一旦你习惯了它,它就会成为你模型最好的朋友
- 由于你的模型是
parcelable
现在您可以轻松地在片段、活动之间传递它,甚至将其保存在共享首选项中。当您通过考试时,需要注意一件重要的事情parcelable
在片段或活动之间,就像按值传递一样,即每次创建新实例时。
-
设置片段的参数,或者如果它已经实例化,则获取参数并添加模型。这是一个例子:
如果片段尚未激活:
Bundle args = new Bundle();
args.putParcable("businessObject", yourBusinessObjectThatIsParcable);
yourFragment.setArguments(args);
否则:yourFragment.getArguments().putParcelable("businessObject", yourBusinessObjectThatIsParcable);
在您的片段中,也许在 onCreateView 方法中获取您的模型对象,如下所示MyParcableObject mpo = (MyParcableObject)getArguments().getParcelable("businessObject")
并使用它设置你想要的任何数据。
当您在按钮单击或 onPause 方法中完成编辑对象时,以相同的方式更新片段的参数getArguments().putParcelable("businessObject", mpo);
在最后一页或最后一个片段中,您可以将对象传递给您的活动,here https://stackoverflow.com/a/819427/855843是如何做到的
尽管它看起来很麻烦,但这是作为 Android 开发人员需要习惯的一种做法。当您的模型实现时,您可以获得更多控制权parcelable
.
做你需要的事情的另一种方法是通过委托模式 https://en.wikipedia.org/wiki/Delegation_pattern但它主要用于回调,即使您也可以传递对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)