我是靠谱客的博主 拼搏玫瑰,最近开发中收集的这篇文章主要介绍fragment与activity之间的信息传递的两种方式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

因为Fragment和Activity一样是具有生命周期,不是一般的bean通过构造函数传值,会造成异常。


fragment与activity之间的信息传递的两种方式:

1、第一种方式,也是最常用的方式,就是使用Bundle来传递参数

 MyFragment myFragment = new MyFragment();
        Bundle bundle = new Bundle();
        bundle.putString("DATA",values);//这里的values就是我们要传的值
        myFragment.setArguments(bundle);

然后在Fragment中的onCreatView方法中,通过getArgments()方法,获取到bundle对象,然后通过getString的key值拿到我们传递过来的值。

2、第二种方式,是在宿主Activity中定义方法,将要传递的值传递到Fragment中,在Fragment中的onAttach方法中,获取到这个值

//宿主activity中的getTitles()方法
public String getTitles(){
    return "hello";
}

//Fragment中的onAttach方法
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        titles = ((MainActivity) activity).getTitles();
    }
//通过强转成宿主activity,就可以获取到传递过来的数据
 Fragment把值传递给Activity的主要步骤:

(1)在fragment中定义一个内部回调接口,再让包含该fragment的activity实现该回调接口,这样fragment即可调用该回调方法将数据传给activity。其实接口回调的原理都一样,以前的博客有讲到,接口回调是java不同对象之间数据交互的通用方法。

(2)activity实现完了接口怎么传给刚才的fragment呢?当fragment添加到activity中时,会调用fragment的方法onAttach(),这个方法中适合检查activity是否实现了OnArticleSelectedListener接口,检查方法就是对传入的activity的实例进行类型转换,然后赋值给我们在fragment中定义的接口。

(3)在一个fragment从activity中剥离的时候,就会调用onDetach方法,这个时候要把传递进来的activity对象释放掉,不然会影响activity的销毁,产生不必要的错误。注意看onAttach方法中的代码,在赋值之前要做一个判断,看看Activity中有没有实现了这个接口,用到了instanceof。如果没有实现接口,我们就抛出异常。

最后

以上就是拼搏玫瑰为你收集整理的fragment与activity之间的信息传递的两种方式的全部内容,希望文章能够帮你解决fragment与activity之间的信息传递的两种方式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部