【问题标题】:Android Best Practice - Communication between Activity and FragmentsAndroid 最佳实践 - Activity 和 Fragments 之间的通信
【发布时间】:2015-01-26 19:41:34
【问题描述】:

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

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

片段到活动

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

Activity 到 Fragment

这是我不确定的。 android 开发者网站说,为了与 Fragment 进行通信,您必须将对象放在 Bundle 中。

Bundle bundle = new Bundle();
bundle.putInt(SOME_IDENTIFIER, myInt);

现在我知道当我有相当多的功能可以分离时,我会时不时地使用 Singleton 类。假设我有一个名为 PersistenceService 的 Singleton,我在其中处理所有与持久性相关的东西,例如在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 并直接访问那里的数据。

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

【问题讨论】:

    标签: android performance android-activity android-fragments communication


    【解决方案1】:

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

    确实如此,这完全取决于软件中没有硬性规定,“总是”和“从不”是不应该在软件中使用的非常强大的词,所以说总是去“捆绑”信息或者 Never go for a Singleton 特别是在软件方面有点愚蠢,因此,与其告诉你确切使用什么,不如问问你自己什么更适合你的需求,比如可扩展性、可扩展性、可管理性等。示例:

    如果您选择 Bundle,则可以为您的片段提供一些灵活性,您正在创建某种独立的组件,准备好使用您提供的任何信息,另一方面,如果您知道您只需要那个片段地方,你将传递的信息有点复杂(不能使用捆绑传递),为什么这么复杂?如果它的工作简单而干净,那就选择 Singleton。

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

    希望对你有帮助!

    问候!

    【讨论】:

    • 完美! :D 我很欣赏你对此事的看法,当问题再次出现时,我一定会记住它。谢谢!
    【解决方案2】:

    当我想在片段之间发送数据时(通过接口从片段到活动,通过包从活动到片段),我使用包。

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

    【讨论】:

      【解决方案3】:

      请理解 2 个 Fragment 不能直接相互通信,它们需要在创建它们的上下文中的 Activity 的帮助。使用接口:)。 在片段中实现接口

      接口StartCommunication

      在上下文片段正在使用的活动中定义接口

      public class MainActivity extends Activity implements
          SendFragment.StartCommunication
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-11
        • 1970-01-01
        • 2022-11-29
        • 2012-04-12
        • 1970-01-01
        • 2015-07-23
        • 1970-01-01
        • 2012-12-24
        相关资源
        最近更新 更多