安卓最佳实践 - 活动和碎片之间的通信

4
希望你们能为我澄清一些问题。
我已经使用Android大约6个月了,但仍然对Activity和Fragment之间的最佳通信方式感到困惑。我已经阅读了安卓开发者网站上的信息。
从Fragment到Activity
现在我可以百分之百确定,接口是从Fragment到Activity进行通信的最佳方式。也就是说,在Fragment中创建一个接口并让Activity实现它。这样,您就可以在Fragment中调用接口中的方法,并由Activity(实现接口)处理它。
从Activity到Fragment
在这里,我不确定。安卓开发者网站说,为了与Fragment通信,必须将对象放入Bundle中。
Bundle bundle = new Bundle();
bundle.putInt(SOME_IDENTIFIER, myInt);

现在,当我需要将某些功能分离出来时,我会使用单例类。例如,我有一个名为PersistenceService的单例类,用于处理所有与持久性相关的内容,例如,在SharedPreferences中保存某些东西。然后,PersistenceService将具有像putMyString(String key, String myString)putSomeObject(String key, SomeObject someObj)这样的方法。这样,一个类不必自己处理持久性,只需调用PersistenceService即可。

假设我需要更新Fragment中的TextView或其他内容,我会这样做:

String myString = PersistenceService.getInstance(getActivity()).getMyString(someKey);
textView.setText(myString);

我传递一个上下文(getActivity()),因为我需要它来获取SharedPreferences

现在我的实际问题是:

我应该在Activity中检索数据并通过Bundle将其传递给所需的Fragment吗?还是我直接在Fragment中引用我的Singleton,并直接访问数据。

我并没有被卡住,但我想知道你们会推荐什么。 非常感谢任何建议、备注、信息等。

3个回答

1
这是一个非常广泛的问题,正如实用思维和学习书中所说,软件中大多数问题的答案都是“这取决于!”。实际上确实如此,一切都取决于具体情况,软件中没有硬性规定,“总是”和“从不”是非常强有力的词语,在软件中不应使用,因此,与其准确地告诉您要使用什么,不如问问自己在考虑可扩展性、可扩展性和可管理性等方面,哪种更适合您的需求。例如:
如果您选择Bundle,则为片段提供了一定的灵活性,创建了一种独立的组件,可以使用您提供的任何信息进行工作。另一方面,如果您知道您只需要该片段位于那个位置,并且要传递的信息有些复杂(无法使用bundle传递),为什么要这么麻烦呢?如果Singleton能够简单而清晰地完成工作,就选择它。
我希望我的观点能够得到很好的解释,对于选择哪一种方式没有硬性规定,只要尽可能认真努力,不要因为懒惰或疏忽而偏向某一方面,相反,应该根据自己的需求进行分析,判断是否值得采用某种方式,并且始终记住,不是因为你这次选择了这条路就适用于你所有的情况。

希望有所帮助!

祝好!


太好了! :D 我很感激你对这个问题的看法,并且在再次遇到这个问题时一定会记住它。谢谢! - Ombrax

0

当我想从片段传递数据到另一个片段时(通过接口从片段到活动,通过bundle从活动到片段),我使用bundle。

如果数据在所有片段中都被使用,则单例是最好的方式,有时我也会在活动中使用数据对象的实例,并通过活动的公共方法在片段中进行操作,但我不认为这是最佳实践。


-1
请理解,两个 Fragment 不能直接相互通信,它们需要在创建它们的 Activity 的上下文环境下进行通信。可以使用接口来实现 :). 在 Fragment 中实现接口。
接口:StartCommunication 在包含该 Fragment 上下文的 Activity 中定义接口。
public class MainActivity extends Activity implements
    SendFragment.StartCommunication

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接