Fragment 多层嵌套方法调用问题的解决方案
作者:NELA 发布时间:2023-09-29 08:12:38
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 多层嵌套方法调用问题的解决方案网站的支持!
来源:http://blog.csdn.net/cuizehui123/article/details/52245481


猜你喜欢
- Android EditText密码的隐藏和显示功能实现效果图:实现代码:首先在xml里创建两个控件 EditText和CheckBox然后
- 废话不多说了,直接给大家贴代码了。具体代码如下所示:using System;using System.Collections.Generi
- 通过XmlDocument类修改XML文档数据,通常需要以下几个主要步骤或其中几个步骤。(1)获取一个包含XML文档数据的XmlDocume
- 最近项目中遇到一个问题,在用户没填数据的时候,我们需要接收从前端传过来的对象为null,但是前端说他们一个一个判断特别麻烦,只能传个空对象过
- 今天,简单讲讲android里如何获取一个视频文件的第一帧作为缩略图显示在界面上。之前,我说个最近需要从服务器下载视频文件,但是下载后肯定需
- docx4j变量替换的问题最近工作上需要自己完成word文档变量替换的问题把里面的变量给替换成数据库里的值,但是由于在word文档渲染成xm
- 冒泡排序冒泡排序的思想:每次让当前的元素和它的下一个元素比较大小、如果前一个的元素大于后一个元素的话,交换两个元素。这样的话经历一次扫描之后
- 这篇文章主要介绍了Spring boot @RequestBody数据传递过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有
- Kotlin中的面向对象面向对象面向对象的含义大家应该并不陌生,通过将事物抽象成对象,大大简化了程序的开发难度。我们常用的Java、Pyth
- 一、银行存取款1.前言毕竟谁不喜欢钱呢!(不是😅)我看谁不喜欢在知识的海洋中遨游😤!2.描述银行存取款的流程是人们非常熟悉的事情,用户可以在
- 如果出现:org.apache.ibatis.binding.BindingException: Invalid bound stateme
- 环境IDEA :2020.1Maven:3.5.6SpringBoot: 2.0.9 (与此前整合的版本2.3.3 不同,版本适配问题,为配
- 一、相关介绍Gradle是一个好用的构建工具 ,使用它的原因是:配置相关依赖代码量少,不会像maven一样xml过多 打包编译测试
- Spring Boot提供的监控接口,例如:/health、/info等等,实际上除了之前提到的信息,还有其他信息业需要监控:当前处于活跃状
- pom.xml<dependency> <groupId>org.springframework.bo
- 没人会喜欢空指针异常!有什么方法可以避免它们吗?或许吧。。本文将讨论到以下几种技术1.Optional类型(Java 8中新引入的)2.Ob
- 本文实例讲述了Android编程实现震动与振铃的方法。分享给大家供大家参考,具体如下:1、Android的震动实现——Vibrator类(1
- 1 前言为什么我们在使用SpringBoot框架开发Java Web应用需要引入大量的starter?例如,我们引入Redis就在Maven
- 简要DecimalFormat 的 pattern 都包含着 正负子 pattern ,例如 “#,##0.00;(#,##0.00)”:/
-   考虑到直接讲实现一个类Task库思维有点跳跃,所以本节主要讲解Async/Await的本质作用(解决