当前位置: 移动技术网 > 移动技术>移动开发>Android > Fragment 多层嵌套方法调用问题的解决方案

Fragment 多层嵌套方法调用问题的解决方案

2019年07月24日  | 移动技术网移动技术  | 我要评论

fragment的产生与介绍

android运行在各种各样的设备中,有小屏幕的手机,超大屏的平板甚至电视。针对屏幕尺寸的差距,很多情况下,都是先针对手机开发一套app,然后拷贝一份,修改布局以适应平板神马超级大屏的。难道无法做到一个app可以同时适应手机和平板么,当然了,必须有啊。fragment的出现就是为了解决这样的问题。你可以把fragment当成activity的一个界面的一个组成部分,甚至activity的界面可以完全有不同的fragment组成,更帅气的是fragment拥有自己的生命周期和接收、处理用户的事件,这样就不必在activity写一堆控件的事件处理的代码了。更为重要的是,你可以动态的添加、替换和移除某个fragment。

fragment的生命周期

fragment必须是依存与activity而存在的,因此activity的生命周期会直接影响到fragment的生命周期。官网这张图很好的说明了两者生命周期的关系:

下面介绍下fragment多层嵌套情况下如何解决方法调用的问题

可能会出现同一个activity中

对象1: a fragment

对象2:b fragment 中 a listview 或 a viewadapter

交互情况:b fragment 中的某一界面 获取到信息后(可能是网络信息等),传递给a fragment 或者 a fragment 处理过事件后又要通知b fragment 下的界面做出改变。

方案1

调用方法 通过中间人 activity

在b fragment 内 通过中间人 activity 获取到 a fragment 对象 调用a fragment 中的方法

弊端: 当有很多层时 这种中间人的获取就变成了多层中间人 ,需要处理中间人很多次

例如:想要调用在b fragment 中的 viewpager 的list 中的 pager类父类 的子类对象中的方法时

1,子类对象需要重写该方法

2,需要将父类定义该方法

3,需要将b fragment 中找到list 中的子类对象并调用该方法

4,需要在a fragment 中找到 bfragment 对象 调用该方法

由此可见 当嵌套方式越复杂, 这个方法需要处理的 层次关系就越多。。。所以采用方案2

方案2

接口方式

在a fragment 中 定义接口

这里展示案例 通过定义接口的方式在afragment 调用b fragment 的方法:

public class a_fragment extends basefragment { 
private onswitchpaperlistener onswitchpaperlistener; 
//定义接口和接口方法 
public interface onswitchpaperlistener{ 
void switchpaper(int i); 
} 
//对外提供一个设置监听的方法。 
public void setonswichtpaerlistener(onswitchpaperlistener listener){ 
this.onswitchpaperlistener=listener; 
} 
@override 
public void intievent() { 
//这这之前处理了很多逻辑和信息后需要将消息通过afragment 传递给b了 
if(onswitchpaperlistener!=null){ 
onswitchpaperlistener.switchpaper(position); 
}else { 
} 
} 
}

而bfragment 只需要 实现接口并 重写接口方法 即可被a fragment 调用

在b fragment 中的 许多莫名嵌套内的类中:

mainactivity.getafragment().setonswichtpaerlistener(new slidingleft_fragment.onswitchpaperlistener() { 
@override 
public void switchpaper(int i) { 
basecenterpaper currentpaper= basecenterpaperlist.get(i); 
tv_title.settext(lists.get(i).gettitle()); 
//先移除 
fl.removeallviews(); 
currentpaper.initdata(); 
fl.addview(currentpaper.getroot()); 
} 
}); 

以上所述是小编给大家介绍的fragment 多层嵌套方法调用问题的解决方案,希望对大家有所帮助

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网