我是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
中提供的一些数据。
我现在做的是:
将数据作为意图中的额外内容传递给FragmentB
。其中一些实际上是FragmentB
所需要的,但有些则不是,并传递给FragmentB
,以便随后通过FragmentC
传递给FragmentB
(再次通过意图/额外)如果用户实际按下了打开FragmentC
布局的按钮
问题:
1)它有效,但我想知道我是否将{1}}数据的意图附加传递给它并不真正需要的是错误/黑客并且有更好/标准的解决方案
2)当在片段之间传递数据时,这些数据副本或单个副本是否会被传递?我不清楚。例如。在我的例子中,如果我有一个非常大的对象从FragmentB
传递到FragmentA
(不需要它),然后FragmentB
将它传递给FragmentB
(确实需要它)我最终占据了3 x大小的物体?
答案 0 :(得分:1)
1)意图可能是正确的方法。您需要传递不需要的数据的事实听起来像您可能在片段中有一些非常紧密的耦合,这可能对以后的灵活性有害。由于数据(我假设)是相关的,因此将它抽象为类并使Parcable或Serializable类成为有意义以减少这种耦合。
2)假设您使用parcable / serializable,它们实际上是被复制的。这是因为意图不必转到您的应用程序,因此系统会将您的数据转换为可由第二个应用程序读取的表单。 (我不确定它实际使用的格式,但想象它是JSON。出于所有实际目的,它也可能是。)
答案 1 :(得分:0)
意图绝对是这样做的!正如另一个已经发布的那样,由于数据被复制,您希望仅在您的意图中存储尽可能少的数据。作为一般的个人经验法则,我将我的活动设计为仅在意图内部使用2~3个不同的额外值,通常存储密钥或ID和状态,并且接收活动基于这些少数键值打开并初始化所有内容。
答案 2 :(得分:0)
在您的解决方案中考虑这些事情:
1-讨论你需要的活动之间的意图 2-在activity / fragment之间传递一个大数据:使用意图传递的pareceable / seriazable bundle:http://blog.denevell.org/android-parcelable.html
3-将数据从片段传递到活动需要一个通信器接口: http://developer.android.com/training/basics/fragments/communicating.html