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

 更新时间:2016年08月25日 14:31:56   作者:NELA  
这篇文章主要介绍了Fragment 多层嵌套方法调用问题的解决方案的相关资料,需要的朋友可以参考下

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 多层嵌套方法调用问题的解决方案,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • android自定义Toast设定显示时间

    android自定义Toast设定显示时间

    这篇文章主要为大家详细介绍了android自定义Toast设定显示时间,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • Android ViewPager无限循环实现底部小圆点动态滑动

    Android ViewPager无限循环实现底部小圆点动态滑动

    这篇文章主要为大家详细介绍了Android ViewPager无限循环实现底部小圆点动态滑动的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • Android从服务器获取图片的实例方法

    Android从服务器获取图片的实例方法

    Android从服务器获取图片的实例方法,需要的朋友可以参考一下
    2013-06-06
  • Android实现关机后数据不会丢失问题

    Android实现关机后数据不会丢失问题

    这篇文章主要介绍了Android实现关机后数据不会丢失问题,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • Presenting Streams in Flutter小技巧

    Presenting Streams in Flutter小技巧

    这篇文章主要为大家介绍了Presenting Streams in Flutter小技巧示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Android 数据结构全面总结分析

    Android 数据结构全面总结分析

    这篇文章主要为大家介绍了Android 数据结构全面总结分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Room Kotlin API的使用入门教程

    Room Kotlin API的使用入门教程

    这篇文章主要介绍了Room Kotlin API使用入门教程,帮助大家更好的理解和学习使用并且测试 Room Kotlin API,感兴趣的朋友可以了解下
    2021-04-04
  • 谈一谈Android内存泄漏问题

    谈一谈Android内存泄漏问题

    谈一谈Android内存泄漏问题,围绕内存泄露的定义、内存泄露的原理、内存泄露的解决方法进行探讨,感兴趣的小伙伴们可以参考一下
    2016-01-01
  • 深入学习Android ANR 的原理分析及解决办法

    深入学习Android ANR 的原理分析及解决办法

    Android系统中,AMS和WMS会检测App的响应时间,如果App在特定时间无法相应屏幕触摸或键盘输入时间,或者特定事件没有处理完毕,就会出现ANR。本文将带领大学深入学习一下ANR的原理及解决办法,感兴趣的同学可以学习一下
    2021-11-11
  • Android 内存优化知识点梳理总结

    Android 内存优化知识点梳理总结

    这篇文章主要介绍了Android 内存优化知识点梳理总结,Android 操作系统给每个进程都会分配指定额度的内存空间,App 使用内存来进行快速的文件访问交互,长时间如此便需要优化策略,文章分享优化知识点总结,需要的朋友可以参考一下
    2022-06-06

最新评论