Android最佳实践——Activity与Fragment之间的通信

标签 android performance android-activity android-fragments communication

希望你们能为我澄清一些事情。

我已经使用 Android 大约 6 个月了,但我仍然对 Activity 和 Fragment 之间通信的最佳方式感到困惑。我已经阅读了关于 android developer site 的信息.

fragment 到 Activity

现在我 100% 肯定地知道接口(interface)是从 Fragment 到 Activity 的最佳通信方式。 IE。在您的 Fragment 中创建一个接口(interface)并让您的 Activity 实现它。通过这种方式,您可以从 Fragment 中的接口(interface)调用该方法,并由 Activity(实现该接口(interface))处理它。

Activity 到 fragment

这是我不确定的。 android 开发者网站说,为了与 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 并直接访问那里的数据。

我没有被卡住或任何东西,但我想知道你们会推荐什么。 非常感谢任何建议、评论、信息等。

最佳答案

这是一个非常宽泛的问题,正如实用主义思维和学习一书中所说,软件中大多数问题的答案是“这一切都取决于!”。

确实如此,这真的完全取决于,软件中没有硬性规定,“总是”和“从不”是非常强大的词,不应该在软件中使用,所以,总是说“bundle ”信息或者永远不要选择单例在软件方面有点愚蠢,所以,与其告诉你确切使用什么,不如问问自己什么更适合你的需求,比如可伸缩性、可扩展性、可管理性等。对于示例:

如果你选择 Bundle,你给了你的 fragment 一些灵 active ,你正在创建某种独立的组件,准备好使用你提供的任何信息,另一方面,如果你知道你只需要那个 fragment 放置,并且您将传递的信息在某种程度上很复杂(不能使用 bundle 传递),为什么要复杂化这么多?如果 Singleton 的工作简单明了,就选择 Singleton。

我希望我的观点在这里得到很好的解释,对于一种或另一种方式没有硬性规定,只要尽可能勤奋,不要仅仅因为懒惰或疏忽而采用这种或另一种方式,而是在值得的情况下成为分析师根据您的需要采取一种或另一种方式,并始终认为这不是因为您这次采用了那种方式,这对您的所有场景都是如此。

希望对您有所帮助!

问候!

关于Android最佳实践——Activity与Fragment之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28157505/

相关文章:

arrays - 将数据框转换为逗号分隔字符串列表的最快方法

android - BroadcastReceiver CONNECTIVITY_CHANGE 总是在第一次启动应用程序时运行?

java - 单击按钮后如何使用异步任务调用方法

php - 如何从 Android 应用程序 PHP Web 服务器发布 GoogleAuthUtil.getToken() 的 token

javascript - Javascript 中的 JSONPath 太长了——比经典循环长大约 3000 倍

linux - 在 Linux 中检测系统负载,重点放在 "swap thrashing"

Android Studio - 导航 Activity

android - 在运行时在 android 中更改 Activity 的布局

android - 禁用时更改 FAB 背景颜色

android - 每当收到推送通知时,在 mainActivity 中做一些事情