我是android的新手,我想知道什么是编写干净代码的最好方法。
我有下面的例子:
ActivityA ---> FragmentA (main UI window the user sees) 然后根据用户的操作
FragmentA --->starts---> ActivityB-->FragmentB (the next window the user sees and hides previous one) 然后在用户点击时:
FragmentB---> starts ---> ActivityC-->FragmentC (the next window the user see that hides the rest) 因此,在最后一步中,用户会看到FramentC的布局。
在FragmentC中,为了正确地填充布局的小部件,我需要一些在FragmentA中可用的数据。
我现在做的是:
在intent to FragmentB中将数据作为额外内容传递。其中一些实际上是FragmentB需要的,而另一些则不是,它们被传递给FragmentB,因此如果用户实际按下打开FragmentC布局的按钮,它们随后会通过FragmentB (同样是通过意图/额外)传递给FragmentC
问题:
1)它是有效的,但我想知道我向FragmentB数据传递它并不真正需要的额外意图的事实是否是错误的/错误的,并且有更好的/标准的解决方案
2)当在片段之间传递数据时,这些数据是副本还是单个副本被传递?我不清楚这一点。例如,在我的示例中,如果我有一个非常大的对象从FragmentA传递给FragmentB (不需要它),然后FragmentB将它传递给FragmentC (确实需要它),我最终会占用该对象的3x大小吗?
发布于 2015-03-21 05:52:45
1)意图可能是正确的方式。事实上,您需要传递不需要的数据,这听起来像是您的片段中可能有一些非常紧密的耦合,这可能会对以后的灵活性造成不利影响。由于数据(我假设)是相关的,因此将其抽象到一个类中并使该类成为Parcable或Serializable类以减少这种耦合是有意义的。
2)假设你使用parcable/serializable,它们实际上是被复制的。这是因为意图不必转到您的应用程序,因此系统会将您的数据转换为可由第二个应用程序读取的表单。(我不确定它实际使用的是什么格式,但可以将其想象为JSON。对于所有的实际目的,它也可能是)。
发布于 2015-03-21 06:09:01
意图绝对是做到这一点的方法!正如另一个回答的帖子所说,因为数据是复制的,所以您希望在意图中只存储尽可能少的数据。作为一般的个人经验法则,我将我的活动设计为仅在意图中使用2~3个不同的附加值,意图通常存储一个键或ID和状态,接收活动将根据这几个键值打开并初始化所有内容。
发布于 2015-03-21 06:58:02
在您的解决方案中考虑以下内容:
1-在activity之间进行讨论,您需要intent 2-在activity/fragment之间传递大数据:使用在intent中传递的可并行/可序列化捆绑包:http://blog.denevell.org/android-parcelable.html
3-要将数据从片段传递到活动,您需要一个通信器接口:http://developer.android.com/training/basics/fragments/communicating.html
https://stackoverflow.com/questions/29175861
复制相似问题