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

时间:2015-01-26 19:41:35

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

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

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

片段到活动

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

片段活动

我在这里不确定。 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

现在我的实际问题是:

我是否在活动中检索我的数据并通过其Bundle将其传递给所需的片段?或者我只是在我的片段中引用我的Singleton并直接访问那里的数据。

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

3 个答案:

答案 0 :(得分:1)

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

确实如此,它真的完全取决于,软件中没有硬性规则,“永远”和“永不”是非常强大的词汇,不应该在软件中使用,因此,总是说“捆绑”信息或者从不选择Singleton在软件中有点愚蠢,因此,不要告诉你究竟使用什么,而是要问自己什么能更好地满足你的需求,包括可伸缩性,可扩展性可管理性等等。例如:

如果你选择Bundle,你可以为你的片段提供一些灵活性,你创建了一些独立的组件,可以使用你提供的任何信息,另一方面,如果你知道你只需要那个片段你要传递的信息有些复杂(不能用捆绑传递),为什么这么复杂?如果它的工作简单而干净,那就去单身人士吧。

我希望我的观点在这里得到很好的解释,对于这种或那种方式没有严格的规定,只要尽可能勤奋并且不要因为懒惰或疏忽而采取某种方式,而不是分析师是否值得根据你的需要以这种或那种方式进行,并始终记住,不是因为你这样做,这次将适用于所有场景。

希望它有帮助!

问候!

答案 1 :(得分:0)

当我想要将数据从片段发送到片段(从片段到活动的接口,从活动到片段分发)时,我使用bundle。

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

答案 2 :(得分:-1)

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

interface StartCommunication

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

public class MainActivity extends Activity implements
    SendFragment.StartCommunication