2个片段如何在活动中相互通信

时间:2016-01-16 07:59:05

标签: android android-fragments android-activity

考虑我们可以将其称为基本活动的活动。这个基本活动中添加了两个片段,调用为fragmentOne和fragentTwo.How片段可以与fragentTwo通信,反之亦然。

3 个答案:

答案 0 :(得分:0)

您可以定义interface以在片段之间进行通信。 通过这个链接 http://developer.android.com/training/basics/fragments/communicating.html 希望它有所帮助。

答案 1 :(得分:0)

参考Communicating with Other Fragments,片段之间的通信应该通过活动,我们最好不要直接使用。我们必须知道片段生命周期必须依赖于活动,并且考虑到类的耦合,我们应该让片段做自己的任务和其他任务需要通过其持有者活动与其他类进行通信。

答案 2 :(得分:0)

片段之间的所有通信都应该通过活动来实现。例如,如果要从Fragment2中调用Fragment1中的方法foo(),请将中间方法添加到包含两个片段的活动(例如MainActivity):

scala> val serviceFactory = Thrift.newClient(...)
serviceFactory: ServiceFactory[ThriftClientRequest,Array[Byte]] = <function1>

scala> val tweetService = new TweetService.FinagledClient(serviceFactory.toService)
tweetService: TweetService.FinagledClient = TweetService$FinagledClient@20ef6b76

scala> Await.result(tweetService.getTweets(GetTweetsRequest(Seq(20))))
res7: Seq[GetTweetResult] = ... "just setting up my twttr" ...

scala> serviceFactory.close
res8: Future[Unit] = ConstFuture(Return(()))

scala> Await.result(tweetService.getTweets(GetTweetsRequest(Seq(20))))
com.twitter.finagle.ServiceClosedException

现在您可以从Fragment2中调用它:public void foo(){ Fragment f = getFragmentManager().findFragmentById(R.id.fragment1); if (f != null) { ((Fragment1) f).foo(); } }

但不要忘记,所有片段都有自己的生命周期。