Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android最佳实践-活动和片段之间的通信_Android_Performance_Android Activity_Android Fragments_Communication - Fatal编程技术网

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

Android最佳实践-活动和片段之间的通信,android,performance,android-activity,android-fragments,communication,Android,Performance,Android Activity,Android Fragments,Communication,希望你们能为我澄清一些事情 我已经使用安卓6个月了,但我仍然对在活动和片段之间进行通信的最佳方式感到困惑。我已经读过报纸上的信息了 碎片到活动 现在我100%肯定地知道,接口是从片段到活动进行通信的最佳方式。即,在片段中创建一个接口,并让您的活动实现它。通过这种方式,您可以从片段内的接口调用该方法,并让活动(实现该接口)处理该方法 分裂活动 这是我不确定的。android开发者网站表示,为了与片段通信,您必须将对象放在一个捆绑包中 Bundle bundle = new Bundle(); bu

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

我已经使用安卓6个月了,但我仍然对在活动和片段之间进行通信的最佳方式感到困惑。我已经读过报纸上的信息了

碎片到活动 现在我100%肯定地知道,接口是从片段到活动进行通信的最佳方式。即,在片段中创建一个接口,并让您的活动实现它。通过这种方式,您可以从片段内的接口调用该方法,并让活动(实现该接口)处理该方法

分裂活动 这是我不确定的。android开发者网站表示,为了与片段通信,您必须将对象放在一个捆绑包中

Bundle bundle = new Bundle();
bundle.putInt(SOME_IDENTIFIER, myInt);
现在我已经知道,当我有一些可以分离的功能时,我会时不时地使用Singleton类。假设我有一个名为
PersistenceService
的单例,我在其中处理所有与持久性相关的内容,例如,在
SharedReferences
中保存一些内容。然后,
PersistenceService
将保存类似于
putMyString(String key,String myString)
putSomeObject(String key,SomeObject-someObj)
的方法。这样,类不必自己处理持久性,只需调用
PersistenceService
即可

现在,假设我必须更新片段中的某些内容,文本视图或其他内容。 我就是这么做的:

String myString = PersistenceService.getInstance(getActivity()).getMyString(someKey);
textView.setText(myString);
我传入一个上下文(
getActivity()
),因为我需要它来获取
SharedReferences

现在我的实际问题是:

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

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

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

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

如果你选择Bundle,你会给你的片段提供一些灵活性,你会创建一些独立的组件,准备好处理你提供的任何信息,另一方面,如果你知道你只在那个地方需要片段,并且你要传递的信息是复杂的(不能用Bundle传递),为什么这么复杂?如果单身汉能简单干净地完成任务,那就选择单身汉吧

我希望我的观点能在这里得到很好的解释,没有任何硬性规定,只是尽可能地勤奋,不要因为懒惰或疏忽而走任何一条路,如果值得走任何一条路,就根据你的需要做一个分析师,并时刻记住这一点,不是因为你这次走了这条路,这对你所有的场景都是正确的

希望有帮助


问候

当我想将数据从一个片段发送到另一个片段(通过接口从一个片段发送到另一个活动,通过绑定从一个活动发送到另一个片段)时,我使用bundle


如果在所有片段中使用数据,那么单例是最好的方法,有时我也会在活动中使用数据对象集的距离,我通过活动的公共方法在片段中操纵该距离,但我认为这不是最好的方法

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

接口
StartCommunication

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

public class MainActivity extends Activity implements
    SendFragment.StartCommunication

太好了D我赞赏你对此事的看法,当问题再次出现时,我一定会记住这一点。谢谢