关于Fragment和Activity之间通讯传参的一点小心得

来源:互联网 发布:中国心力衰竭数据平台 编辑:程序博客网 时间:2024/06/06 08:51

情况是这样的,博主这边有一个需求就是在fragment上的自定义viewpager上自动分页加载内容,动态增加viewpager页面数,同时在activity上设置动态加载分页的指示点。

这就不可避免的用到了fragment和Activity的通信,需要将fragment上的viewpager的页数下标回返到Activity上来处理上面的指示点。

   博主最初想了三种方案:

1、通过act创建handler,fragment引用handler发送消息,这种方法确实可以实现,但并非万能的,如果反向使用,act引用fragment创建的对象,由于生命周期不同步(长周期引       用短周期),易造成内存泄漏。

2、第二种就是在fragment上通过getActivity()方法获取到其挂载的activity,来实现通讯。这个activity是有指向性的唯一的。换句话说,获取到的是当前挂载的act,而且是不可变的,无疑增加了耦合性。

3、第三种就是博主采用的在fragment定义接口,在act去实现接口(类似于监听者模式)。

   问题就在这:博主从activity中传到fragment中的listener对象存到fragment的全局变量中之后,就变成了null。就是说调用不了传参的方法。后来归咎于生命周期方法不同步的问题。

  解决方案是讲fragment端接收listener的类型设置为静态,提前初始化,然后赋值(赋传过来的listener对象)。

0 0
原创粉丝点击