Fragment和Activity之间进行通信

作者: wxyass 分类: Android 发布时间: 2016-03-25 15:18

Fragment和Activity之间进行通信

虽然Fragment都是嵌入在Activity中显示的,可是实际上它们的关系并没有那么亲密。

你可以看出,Fragment和Activity都是各自存在于一个独立的类当中的,它们之间并没有那么明显的方式来直接进行通信。

如果想要在Activity中调用Fragment里的方法,或者在Fragment中调用Activity里的方法,应该如何实现呢?

为了方便Fragment和Activity之间进行通信, FragmentManager 提供了一个类似于 findViewById()的方法,专门用于从布局文件中获取Fragment的实例,
代码如下所示:

RightFragment rightFragment = 
    (RightFragment) getFragmentManager().findFragmentById(R.id.right_fragment);  

调用 FragmentManager 的 findFragmentById()方法,可以在Activity中得到相应Fragment的实例,然后就能轻松地调用Fragment里的方法了。

掌握了如何在Activity中调用Fragment里的方法,那在Fragment中又该怎样调用Activity里的方法呢?
其实这就更简单了,在每个Fragment中都可以通过调用 getActivity()方法来得到和当前Fragment相关联的Activity实例,
代码如下所示:

MainActivity activity = (MainActivity) getActivity();  

有了Activity实例之后,在Fragment中调用Activity里的方法就变得轻而易举了。
另外当Fragment中需要使用 Context 对象时, 也可以使用 getActivity()方法, 因为获取到的Activity本身就是一个 Context 对象了。

这时不知道你心中会不会产生一个疑问,既然Fragment和Activity之间的通信问题已经解决了,那么Fragment和Fragment之间可不可以进行通信呢?

说实在的,这个问题并没有看上去的复杂,它的基本思路非常简单,首先在一个Fragment中可以得到与它相关联的Activity,然后再通过这个Activity去获取另外一个Fragment的实例,这样也就实现了不同Fragment之间的通信功能,因此这里我们的答案是肯定的。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

邮箱地址不会被公开。 必填项已用*标注