多语言展示
当前在线:392今日阅读:103今日分享:49

安卓标准的Fragment与Activity进行通信交互

Android Fragment 怎么与Activity进行通信交互,Fragment怎么操作Activity中的组件方法
工具/原料
1

AndroidStudio

2

eclipse

3

ADT Bundle

方法/步骤
1

我们先分别创建一个Activity、一个interface和一个Fragment用于操作演示,分别取名为TestActivity.java,TestInterface.java,TestFragment.java,如下图所示:

2

然后来看interface的写法,interface是接口,用于定义Fragment需要怎么样操作Activity,需要获取Activity里面的那些组件,例如,我们想要获取Activity里面的一个ViewPager组件,代码如下:

3

然后再来看Activity里面该怎么写,你需要让Activity去实现你刚刚写的TestInterface这个接口,实现它当然就写去实现它里面的方法了,因为它是想获取Activity里面的ViewPager组件,那我们就把ViewPager返回给它,代码如下:

4

最后再看我们的Fragment该如何用这个接口来与Activity进行通信,只需要在Fragment里面重写onAttach方法,然后把context参数强制转换为TestInterface,然后就可以成功的利用TestInterface来与Activity进行通信了,代码如下:

5

看了上述操作,你是不是学会Fragment与Activity通信了呢?,如果你的Java基础学的足够扎实,看到这里肯定已经恍然大悟了,是不是觉得还有这种操作,哈哈^_^,下面我来讲讲为什么要这样操作-->

6

首先第一点,你肯定会疑问,Fragment里面的onAttach回调方法里面的contxet对象不是代表的上下文对象吗,为什么能强制转换成TestInterface呢,这里的contxet其实是父类引用指向子类对象,因为Activity是间接继承自Context的,可以看下面的关系图,所以这里的onAttach回调方法其实是用了TestActivity的父类来代表它,因为我们得TestActivity又实现了TestInterface接口,所以是可以把contxet直接转换成TestInterface的。

7

第二点你肯定会疑问onAttach里面的contxet为什么会代表TestActivity呢,这里我的Activity代码里面并没有写加载Fragment,我这里只是演示了怎么通信,真正做项目的时候你是会在Activity里面通过FragmentTranslationManager来加载Fragment的,我们来看看Fragment的生命周期:

8

我们可以看到当Fragment被add到Activity中的时候会调用onAttach的方法,并且会在onAttach中带去被附加的Activity的上下文对象,所以onAttach的contxet参数是被附加的Activity的父类的引用

注意事项

Activity一定要去实现你写的interface的接口

推荐信息