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

(0)

相关推荐

  • Android中关于FragmentA嵌套FragmentB的问题

    问题描述: 在项目中Activity A中嵌套Fragment B,Fragment B中再嵌套Fragment C,如图: 问题1:在点击Activity A中主菜单1进行切换时,报错Fragment C already added. 解决:在Framgent B中添加Fragment C 调用add()时先判断fragmentC.isAdded() FragmentManager fm=getActivity().getSupportFragmentManager(); FragmentTr

  • Android 中 Fragment 嵌套 Fragment使用存在的bug附完美解决方案

    自从Android3.0引入了Fragment之后,使用Activity去嵌套一些Fragment的做法也变得更加流行,这确实是Fragment带来的一些优点,比如说:Fragment可以使你能够将activity分离成多个可重用的组件,每个都有它自己的生命周期和UI,更重要的是Fragment解决了Activity间的切换不流畅,实现了一种轻量及的切换,但是在官方提供的android.support.v4包中,Fragment还是或多或少的存在一些BUG,今天就与大家分享一下这些BUG和解决方

  • Android利用Fragment实现Tab选项卡效果

    利用Fragment实现Tab选项卡效果:  将RadioGroup与Fragment集合,实现tab选项卡效果,这里面最关键的几个文件: 1.FragmentTabAdapter类: /** *@Description: *@Author:Nate Robinson *@Since:2015-2-12 */ public class FragmentTabAdapter implements RadioGroup.OnCheckedChangeListener { private List<F

  • Android Fragment多层嵌套重影问题的解决方法

    1解决bug的思想: //step1:当bug被发现(排除极低偶然性,单次性,开发工具导致) //step2:根据经验判断bug的重现场景,多次测试,直到精准的定位bug //step3:根据重现场景找到对应的代码 //step4:分析区域代码是否会影响到其他功能. //step5:做好数据的备份工作.(做好代码重构和恢复的准备,这样你才能肆无忌惮的捣鼓代码) //step6:修复代码的过程中,你会发现可能有多种解决方案.试着采取不影响主线的解决方案.以免影响到其他的代码. //step7:回顾

  • jQuery3.0中的buildFragment私有函数详解

    时隔 3 个月,jQuery 团队终于发布了 3.0 Alpha 版本.有两个版本 jQuery compat 3.0 和 jQuery 3.0. jQuery compat 3.0 对应之前的 1.x, 兼容更多的浏览器,对于IE支持到 8.0 版本 jQuery 3.0 对应之前的 2.x,关注更新的浏览器,对于IE支持到 9.0 版本 此外, 3.0还增加了对 Yandex 浏览器的支持,一款来自俄罗斯的浏览器. 下面看下jQuery3.0中的buildFragment. 在 jQuery

  • Android Fragment的生命周期详解

    Fragments的生命周期 每一个fragments 都有自己的一套生命周期回调方法和处理自己的用户输入事件. 对应生命周期可参考下图: 详解Android Fragment之二:Fragment的创建和生命周期 创建片元(Creating a Fragment) To create a fragment, you must create a subclass of Fragment (or an existing subclass of it). The Fragment class has

  • Android Fragment概述及用法

    Fragment一般是宿主Activity UI的一部分或一种行为,作为Activity的整个View Hierarchy的一部分嵌入.我们可以将多个Fragment组合到一个Activity中创建一个多面界面,也可以在多个Activity中重用一个Fragment.        Fragment概述 我们可以把Fragment视为模块化的一段Activity,它具有自己的生命周期,接收它自己的事件,并可以在activity运行时被添加或删除. Fragment不能独立存在,它必须嵌入到act

  • Android Fragment使用之实例演示

    Fragment是Android honeycomb 3.0新增的概念,在如何使用Android Fragment中做了关于Fragment的详细介绍.本文则主要是通过实例的方式让大家更直观的了解Fragment的使用方法. 首先贴上实例的运行效果截图: 效果图的左边是一个列表,右边是列表item的详情. 先看一下布局文件(layout): XML/HTML代码 <?xml version="1.0″ encoding="utf-8″?> <LinearLayout

  • Android 动态添加Fragment的实例代码

    1.fragment1布局及代码 布局 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width=&quo

  • Android开发 Activity和Fragment详解

    1.Activity的生命周期 1)多个Activity组成Activity栈,当前活动位于栈顶.我们先来看看各种Activity基类的类图: 当Activity类定义出来之后,这个Activity何时被实例化.它所包含的方法何时被调用,这些都不是由开发者所决定的,都应该由Android系统来决定. 下面我们来看一下Activity的生命周期: 2.Activity的用法 1)启动.关闭Activity // 首先需要创建启动的Activity对应的Intent Intent intent =

  • Android Fragment+FragmentTabHost组件实现常见主页面(仿微信新浪)

    采取的方法是Fragment+FragmentTabHost组件来实现这种常见的app主页面的效果 首先给出main.xml文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"

随机推荐