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