区块链技术博客
www.b2bchain.cn

基于 BaseFramework 的 Fragment 显示、管理、事件及消息传递求职学习资料

本文介绍了基于 BaseFramework 的 Fragment 显示、管理、事件及消息传递求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

前言

我们都知道 Fragment 是 Android 中非常好用的一种组件,它可以在一个 Activity 中插入多个具有独自生命周期的子界面以实现更丰富的功能而不让 Activity 里的代码变得更加臃肿,但同样我们要显示 Fragment 实际上非常麻烦,先得拿到 FragmentManager,还得通过 FragmentTransaction 去控制 Fragment 的显示隐藏,而最新的由 Google 提供的 JetPack 中替代方案 Navigation 虽然更直观,但又得配置 XML,并不是非常方便,那么有没有更好的解决方案来实现 Fragment 显示、管理、事件及消息传递呢?BaseFramework 也许可以帮到你。

首先介绍下 BaseFramework,这里说的 Kongzue BaseFramework 是一套基础开发框架,包含沉浸式适配、对 Activity、Fragment 以及 Adapter 的封装,并提供了一些诸如权限申请、跳转、延时操作、提示、日志输出等小工具,以方便快速构建 Android App,其中也提供了一套高效管理 Fragment 的工具组件,使用起来非常方便,接下来我将介绍 BaseFramework 中的 BaseFragment 使用方法。

开始使用

Fragment 是不可以单独直接显示的,那么它必须依赖一个 Activity 进行显示,我们需要确定要显示 Fragment 的 Activity 并在其布局中插入一个 FrameLayout 作为显示基底,这里的范例代码如下:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:app="http://schemas.android.com/apk/res-auto"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:orientation="vertical"     android:fitsSystemWindows="true"     tools:context=".activity.DemoActivity">      <FrameLayout         android:id="@+id/frame"         android:layout_width="match_parent"         android:layout_height="match_parent"         android:layout_weight="1" />      <ImageView         android:layout_width="match_parent"         android:layout_height="1px"         android:background="#DBDBDB" />      <com.kongzue.tabbar.TabBarView xmlns:app="http://schemas.android.com/apk/res-auto"         android:id="@+id/tabbar"         android:layout_width="match_parent"         android:layout_height="55dp"         android:background=/colorWhite"         app:focusColor="#3e78ed"         app:iconPadding="2dp"         app:normalColor="#606060"         app:tabClickBackground="rippleOutside"         app:paddingNavigationBar="false"         app:tabPaddingVertical="5dp"         app:textSize="12dp" />  </LinearLayout>

可以看到这个界面包含了一个FrameLayout、一个分割线以及一个TabBarView用于显示底部的切换按钮,接下来,在我们的Activity中进行注解,即可激活Fragment的管理器:

//使用 注解直接绑定要显示的布局 (R.layout.activity_demo) //绑定子 Fragment 要显示的容器布局 (R.id.frame) public class DemoActivity extends BaseActivity {     ...

通过上述注解@FragmentLayout(R.id.frame)将在 BaseActivity 启动后内部自动生成一个 FragmentChangeUtil 对所有要显示的 Fragment 进行管理,这一切都是自动的,只需要使用注解绑定 Fragment 的显示布局即可。

接下来,我们需要编写要显示的 Fragment,创建一个 FunctionFragment 继承 BaseFragment 并传入泛型 DemoActivity,这里泛型是可选的,但建议设置,因为这将可以从 FunctionFragment 中直接访问 DemoActivity 中的 public 成员或方法,后边会进行介绍,代码如下:

//使用 注解直接绑定要显示的布局 (R.layout.fragment_function) public class FunctionFragment extends BaseFragment<DemoActivity> {     ...

接下来回到 DemoActivity 中,重写initFragment(FragmentChangeUtil fragmentChangeUtil)方法,并在其中添加要显示的 Fragment:

//三个子 Fragment 布局(简介界面、功能界面、Github关于界面) private IntroductionFragment introductionFragment = new IntroductionFragment(); private FunctionFragment functionFragment = new FunctionFragment(); private AboutFragment aboutFragment = new AboutFragment();   //此处为添加子布局逻辑 public void initFragment(FragmentChangeUtil fragmentChangeUtil) {     fragmentChangeUtil.addFragment(introductionFragment);     fragmentChangeUtil.addFragment(functionFragment);     fragmentChangeUtil.addFragment(aboutFragment);      //默认切换至第一个界面     changeFragment(0); }

changeFragment(...)方法有多种用法,除了上述代码中按照添加顺序索引显示外,也可以使用changeFragment(functionFragment)来进行切换,具体可以参考Kongzue BaseFramework的文档,这里不再赘述。

那么接下来,就是绑定按钮关系了,即,我们需要当点击底部 Tabbar 的按钮时切换到指定的 Fragment,代码如下:

tabbar.setOnTabChangeListener(new OnTabChangeListener() {          public void onTabChanged(View v, int index) {         changeFragment(index);     } });

虽然 Tabbar 点击按钮,按钮本身也会直接变化显示状态,但有时候我们可能会通过其他逻辑切换 Fragment,此时能不能让 Tabbar 自动也切换到目标 Fragment 对应的按钮为焦点显示状态?代码如下:

getFragmentChangeUtil().setOnFragmentChangeListener(new OnFragmentChangeListener() {          public void onChange(int index, BaseFragment fragment) {         tabbar.setNormalFocusIndex(index);     } });

通过 getFragmentChangeUtil () 即可直接获得 FragmentChangeUtil 的实例化对象,进而进行切换状态的监听,实现更多的功能。

至此,BaseFramework 的基础 Fragment 管理就表述完毕了,那么还有更多的,例如如何快捷简单的从 Fragment 中切换其他 Fragment,以及如何在 Fragment 之间传递消息?请看下一章 —— 进阶

进阶

Fragment之间的切换

在 Fragment 中,如何快速切换到另一个 Fragment?在 BaseFramework 中,我们约定了 Activity 之间的切换使用 jump(...) 方法进行,例如使用 jump(ResponseActivity.class) 就可以切换到 ResponseActivity,省去 startActivity 方法必须创建 Intent 的过程让这个操作变得更加轻松,那么,在 Fragment 中,我们依然可以通过 jump() 方法跳转到其他 Fragment。

对于都绑定在同一个 Activity 的多个 Fragment 中,可以使用以下代码进行切换:

jump(1);    //1是BaseFragment在BaseActivity中添加时的索引 //或者使用已绑定的实例化Fragment对象进行跳转: jump(me.introductionFragment);  

这里用到了一个关键词 “me”,me 在 BaseFramework 中指向当前 Activity 的实例化对象,在 BaseFragment 中则指向已绑定的 BaseActivity 对象,上边我们提到,在 BaseFragment 设置了泛型的情况下,就可以通过 me 关键词直接指向绑定的 BaseActivity 中的 public 修饰的成员。

Fragment之间传递消息

传递消息

从一个 Fragment 跳转到另一个 Fragment,我们希望携带一些数据,或者从 Fragment 跳转到另一个 Fragment,在返回本 Fragment 时获得一些回传的数据,这些场景在 Activity 中非常常见,但在 Fragment 中却一直是个问题,BaseFramework 的 BaseFragment 则可以轻松实现这些逻辑。

在使用jump()方法跳转到其他 Fragment 时,你可以利用第二个参数传递消息:

jump(2, new JumpParameter()     .put("action", "This is a message.") );

value 可以接受任何类型的数据。

回传消息

如果我们想在从目标 Fragment 切换回来时获取回传数据,我们也可以在跳转前设置回调:

jump(2, new JumpParameter()                 .put("action", "This is a message."), new OnJumpResponseListener() {                         public void OnResponse(JumpParameter jumpParameter) {                 String response = jumpParameter.getString("response");                 ...             }         } );

在切换到目标 Fragment 里可以使用setResponse(JumpParameter);设置回传数据:

setResponse(new JumpParameter().put("response", "This is a response.");

再次返回原 Fragment 后就会收到回传消息了。

BaseFragment的额外生命周期

BaseFragment 还提供了额外的生命周期事件:

onShow 方法

用于替代onResume方法。

进入 Fragment 时调用此方法,isSwitchFragment 标记说明了是否为从别的 Fragment 切换至此 Fragment 的,若为 false,则有可能是从后台切换至前台触发

 public void onShow(boolean isSwitchFragment) {     log("Fragment: onShow"); }

onHide方法

用于在 Fragment 切换后原 Fragment 被隐藏时触发。

 public void onHide() {     log("Fragment: onHide");     super.onHide(); }

尾巴

BaseFragment 是 BaseFramework 框架中的一部分,主要目的是用来解决 Fragment 使用过程中的一些麻烦的问题,并封装了很多便于使用的方法和工具。BaseFragment 还拥有更多好用的功能,详情可以参考开发文档,更建议去看看 Demo 中的代码,都有详尽的注释,非常易懂。

Kongzue BaseFramework 开发框架目的旨在减少重复复杂的开发流程,提供更简单易用的开发方案,但又不干涉开发过程中的开发模式(MVP、MVVM 等)也欢迎大家尝试,提出建议,如有遇到任何问题也欢迎通过 issues 来提出反馈。

前言

我们都知道 Fragment 是 Android 中非常好用的一种组件,它可以在一个 Activity 中插入多个具有独自生命周期的子界面以实现更丰富的功能而不让 Activity 里的代码变得更加臃肿,但同样我们要显示 Fragment 实际上非常麻烦,先得拿到 FragmentManager,还得通过 FragmentTransaction 去控制 Fragment 的显示隐藏,而最新的由 Google 提供的 JetPack 中替代方案 Navigation 虽然更直观,但又得配置 XML,并不是非常方便,那么有没有更好的解决方案来实现 Fragment 显示、管理、事件及消息传递呢?BaseFramework 也许可以帮到你。

首先介绍下 BaseFramework,这里说的 Kongzue BaseFramework 是一套基础开发框架,包含沉浸式适配、对 Activity、Fragment 以及 Adapter 的封装,并提供了一些诸如权限申请、跳转、延时操作、提示、日志输出等小工具,以方便快速构建 Android App,其中也提供了一套高效管理 Fragment 的工具组件,使用起来非常方便,接下来我将介绍 BaseFramework 中的 BaseFragment 使用方法。

开始使用

Fragment 是不可以单独直接显示的,那么它必须依赖一个 Activity 进行显示,我们需要确定要显示 Fragment 的 Activity 并在其布局中插入一个 FrameLayout 作为显示基底,这里的范例代码如下:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:app="http://schemas.android.com/apk/res-auto"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:orientation="vertical"     android:fitsSystemWindows="true"     tools:context=".activity.DemoActivity">      <FrameLayout         android:id="@+id/frame"         android:layout_width="match_parent"         android:layout_height="match_parent"         android:layout_weight="1" />      <ImageView         android:layout_width="match_parent"         android:layout_height="1px"         android:background="#DBDBDB" />      <com.kongzue.tabbar.TabBarView xmlns:app="http://schemas.android.com/apk/res-auto"         android:id="@+id/tabbar"         android:layout_width="match_parent"         android:layout_height="55dp"         android:background=/colorWhite"         app:focusColor="#3e78ed"         app:iconPadding="2dp"         app:normalColor="#606060"         app:tabClickBackground="rippleOutside"         app:paddingNavigationBar="false"         app:tabPaddingVertical="5dp"         app:textSize="12dp" />  </LinearLayout>

可以看到这个界面包含了一个FrameLayout、一个分割线以及一个TabBarView用于显示底部的切换按钮,接下来,在我们的Activity中进行注解,即可激活Fragment的管理器:

//使用 注解直接绑定要显示的布局 (R.layout.activity_demo) //绑定子 Fragment 要显示的容器布局 (R.id.frame) public class DemoActivity extends BaseActivity {     ...

通过上述注解@FragmentLayout(R.id.frame)将在 BaseActivity 启动后内部自动生成一个 FragmentChangeUtil 对所有要显示的 Fragment 进行管理,这一切都是自动的,只需要使用注解绑定 Fragment 的显示布局即可。

接下来,我们需要编写要显示的 Fragment,创建一个 FunctionFragment 继承 BaseFragment 并传入泛型 DemoActivity,这里泛型是可选的,但建议设置,因为这将可以从 FunctionFragment 中直接访问 DemoActivity 中的 public 成员或方法,后边会进行介绍,代码如下:

//使用 注解直接绑定要显示的布局 (R.layout.fragment_function) public class FunctionFragment extends BaseFragment<DemoActivity> {     ...

接下来回到 DemoActivity 中,重写initFragment(FragmentChangeUtil fragmentChangeUtil)方法,并在其中添加要显示的 Fragment:

//三个子 Fragment 布局(简介界面、功能界面、Github关于界面) private IntroductionFragment introductionFragment = new IntroductionFragment(); private FunctionFragment functionFragment = new FunctionFragment(); private AboutFragment aboutFragment = new AboutFragment();   //此处为添加子布局逻辑 public void initFragment(FragmentChangeUtil fragmentChangeUtil) {     fragmentChangeUtil.addFragment(introductionFragment);     fragmentChangeUtil.addFragment(functionFragment);     fragmentChangeUtil.addFragment(aboutFragment);      //默认切换至第一个界面     changeFragment(0); }

changeFragment(...)方法有多种用法,除了上述代码中按照添加顺序索引显示外,也可以使用changeFragment(functionFragment)来进行切换,具体可以参考Kongzue BaseFramework的文档,这里不再赘述。

那么接下来,就是绑定按钮关系了,即,我们需要当点击底部 Tabbar 的按钮时切换到指定的 Fragment,代码如下:

tabbar.setOnTabChangeListener(new OnTabChangeListener() {          public void onTabChanged(View v, int index) {         changeFragment(index);     } });

虽然 Tabbar 点击按钮,按钮本身也会直接变化显示状态,但有时候我们可能会通过其他逻辑切换 Fragment,此时能不能让 Tabbar 自动也切换到目标 Fragment 对应的按钮为焦点显示状态?代码如下:

getFragmentChangeUtil().setOnFragmentChangeListener(new OnFragmentChangeListener() {          public void onChange(int index, BaseFragment fragment) {         tabbar.setNormalFocusIndex(index);     } });

通过 getFragmentChangeUtil () 即可直接获得 FragmentChangeUtil 的实例化对象,进而进行切换状态的监听,实现更多的功能。

至此,BaseFramework 的基础 Fragment 管理就表述完毕了,那么还有更多的,例如如何快捷简单的从 Fragment 中切换其他 Fragment,以及如何在 Fragment 之间传递消息?请看下一章 —— 进阶

进阶

Fragment之间的切换

在 Fragment 中,如何快速切换到另一个 Fragment?在 BaseFramework 中,我们约定了 Activity 之间的切换使用 jump(...) 方法进行,例如使用 jump(ResponseActivity.class) 就可以切换到 ResponseActivity,省去 startActivity 方法必须创建 Intent 的过程让这个操作变得更加轻松,那么,在 Fragment 中,我们依然可以通过 jump() 方法跳转到其他 Fragment。

对于都绑定在同一个 Activity 的多个 Fragment 中,可以使用以下代码进行切换:

jump(1);    //1是BaseFragment在BaseActivity中添加时的索引 //或者使用已绑定的实例化Fragment对象进行跳转: jump(me.introductionFragment);  

这里用到了一个关键词 “me”,me 在 BaseFramework 中指向当前 Activity 的实例化对象,在 BaseFragment 中则指向已绑定的 BaseActivity 对象,上边我们提到,在 BaseFragment 设置了泛型的情况下,就可以通过 me 关键词直接指向绑定的 BaseActivity 中的 public 修饰的成员。

Fragment之间传递消息

传递消息

从一个 Fragment 跳转到另一个 Fragment,我们希望携带一些数据,或者从 Fragment 跳转到另一个 Fragment,在返回本 Fragment 时获得一些回传的数据,这些场景在 Activity 中非常常见,但在 Fragment 中却一直是个问题,BaseFramework 的 BaseFragment 则可以轻松实现这些逻辑。

在使用jump()方法跳转到其他 Fragment 时,你可以利用第二个参数传递消息:

jump(2, new JumpParameter()     .put("action", "This is a message.") );

value 可以接受任何类型的数据。

回传消息

如果我们想在从目标 Fragment 切换回来时获取回传数据,我们也可以在跳转前设置回调:

jump(2, new JumpParameter()                 .put("action", "This is a message."), new OnJumpResponseListener() {                         public void OnResponse(JumpParameter jumpParameter) {                 String response = jumpParameter.getString("response");                 ...             }         } );

在切换到目标 Fragment 里可以使用setResponse(JumpParameter);设置回传数据:

setResponse(new JumpParameter().put("response", "This is a response.");

再次返回原 Fragment 后就会收到回传消息了。

BaseFragment的额外生命周期

BaseFragment 还提供了额外的生命周期事件:

onShow 方法

用于替代onResume方法。

进入 Fragment 时调用此方法,isSwitchFragment 标记说明了是否为从别的 Fragment 切换至此 Fragment 的,若为 false,则有可能是从后台切换至前台触发

 public void onShow(boolean isSwitchFragment) {     log("Fragment: onShow"); }

onHide方法

用于在 Fragment 切换后原 Fragment 被隐藏时触发。

 public void onHide() {     log("Fragment: onHide");     super.onHide(); }

尾巴

BaseFragment 是 BaseFramework 框架中的一部分,主要目的是用来解决 Fragment 使用过程中的一些麻烦的问题,并封装了很多便于使用的方法和工具。BaseFragment 还拥有更多好用的功能,详情可以参考开发文档,更建议去看看 Demo 中的代码,都有详尽的注释,非常易懂。

Kongzue BaseFramework 开发框架目的旨在减少重复复杂的开发流程,提供更简单易用的开发方案,但又不干涉开发过程中的开发模式(MVP、MVVM 等)也欢迎大家尝试,提出建议,如有遇到任何问题也欢迎通过 issues 来提出反馈。

前言

我们都知道 Fragment 是 Android 中非常好用的一种组件,它可以在一个 Activity 中插入多个具有独自生命周期的子界面以实现更丰富的功能而不让 Activity 里的代码变得更加臃肿,但同样我们要显示 Fragment 实际上非常麻烦,先得拿到 FragmentManager,还得通过 FragmentTransaction 去控制 Fragment 的显示隐藏,而最新的由 Google 提供的 JetPack 中替代方案 Navigation 虽然更直观,但又得配置 XML,并不是非常方便,那么有没有更好的解决方案来实现 Fragment 显示、管理、事件及消息传递呢?BaseFramework 也许可以帮到你。

首先介绍下 BaseFramework,这里说的 Kongzue BaseFramework 是一套基础开发框架,包含沉浸式适配、对 Activity、Fragment 以及 Adapter 的封装,并提供了一些诸如权限申请、跳转、延时操作、提示、日志输出等小工具,以方便快速构建 Android App,其中也提供了一套高效管理 Fragment 的工具组件,使用起来非常方便,接下来我将介绍 BaseFramework 中的 BaseFragment 使用方法。

开始使用

Fragment 是不可以单独直接显示的,那么它必须依赖一个 Activity 进行显示,我们需要确定要显示 Fragment 的 Activity 并在其布局中插入一个 FrameLayout 作为显示基底,这里的范例代码如下:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:app="http://schemas.android.com/apk/res-auto"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:orientation="vertical"     android:fitsSystemWindows="true"     tools:context=".activity.DemoActivity">      <FrameLayout         android:id="@+id/frame"         android:layout_width="match_parent"         android:layout_height="match_parent"         android:layout_weight="1" />      <ImageView         android:layout_width="match_parent"         android:layout_height="1px"         android:background="#DBDBDB" />      <com.kongzue.tabbar.TabBarView xmlns:app="http://schemas.android.com/apk/res-auto"         android:id="@+id/tabbar"         android:layout_width="match_parent"         android:layout_height="55dp"         android:background=/colorWhite"         app:focusColor="#3e78ed"         app:iconPadding="2dp"         app:normalColor="#606060"         app:tabClickBackground="rippleOutside"         app:paddingNavigationBar="false"         app:tabPaddingVertical="5dp"         app:textSize="12dp" />  </LinearLayout>

可以看到这个界面包含了一个FrameLayout、一个分割线以及一个TabBarView用于显示底部的切换按钮,接下来,在我们的Activity中进行注解,即可激活Fragment的管理器:

//使用 注解直接绑定要显示的布局 (R.layout.activity_demo) //绑定子 Fragment 要显示的容器布局 (R.id.frame) public class DemoActivity extends BaseActivity {     ...

通过上述注解@FragmentLayout(R.id.frame)将在 BaseActivity 启动后内部自动生成一个 FragmentChangeUtil 对所有要显示的 Fragment 进行管理,这一切都是自动的,只需要使用注解绑定 Fragment 的显示布局即可。

接下来,我们需要编写要显示的 Fragment,创建一个 FunctionFragment 继承 BaseFragment 并传入泛型 DemoActivity,这里泛型是可选的,但建议设置,因为这将可以从 FunctionFragment 中直接访问 DemoActivity 中的 public 成员或方法,后边会进行介绍,代码如下:

//使用 注解直接绑定要显示的布局 (R.layout.fragment_function) public class FunctionFragment extends BaseFragment<DemoActivity> {     ...

接下来回到 DemoActivity 中,重写initFragment(FragmentChangeUtil fragmentChangeUtil)方法,并在其中添加要显示的 Fragment:

//三个子 Fragment 布局(简介界面、功能界面、Github关于界面) private IntroductionFragment introductionFragment = new IntroductionFragment(); private FunctionFragment functionFragment = new FunctionFragment(); private AboutFragment aboutFragment = new AboutFragment();   //此处为添加子布局逻辑 public void initFragment(FragmentChangeUtil fragmentChangeUtil) {     fragmentChangeUtil.addFragment(introductionFragment);     fragmentChangeUtil.addFragment(functionFragment);     fragmentChangeUtil.addFragment(aboutFragment);      //默认切换至第一个界面     changeFragment(0); }

changeFragment(...)方法有多种用法,除了上述代码中按照添加顺序索引显示外,也可以使用changeFragment(functionFragment)来进行切换,具体可以参考Kongzue BaseFramework的文档,这里不再赘述。

那么接下来,就是绑定按钮关系了,即,我们需要当点击底部 Tabbar 的按钮时切换到指定的 Fragment,代码如下:

tabbar.setOnTabChangeListener(new OnTabChangeListener() {          public void onTabChanged(View v, int index) {         changeFragment(index);     } });

虽然 Tabbar 点击按钮,按钮本身也会直接变化显示状态,但有时候我们可能会通过其他逻辑切换 Fragment,此时能不能让 Tabbar 自动也切换到目标 Fragment 对应的按钮为焦点显示状态?代码如下:

getFragmentChangeUtil().setOnFragmentChangeListener(new OnFragmentChangeListener() {          public void onChange(int index, BaseFragment fragment) {         tabbar.setNormalFocusIndex(index);     } });

通过 getFragmentChangeUtil () 即可直接获得 FragmentChangeUtil 的实例化对象,进而进行切换状态的监听,实现更多的功能。

至此,BaseFramework 的基础 Fragment 管理就表述完毕了,那么还有更多的,例如如何快捷简单的从 Fragment 中切换其他 Fragment,以及如何在 Fragment 之间传递消息?请看下一章 —— 进阶

进阶

Fragment之间的切换

在 Fragment 中,如何快速切换到另一个 Fragment?在 BaseFramework 中,我们约定了 Activity 之间的切换使用 jump(...) 方法进行,例如使用 jump(ResponseActivity.class) 就可以切换到 ResponseActivity,省去 startActivity 方法必须创建 Intent 的过程让这个操作变得更加轻松,那么,在 Fragment 中,我们依然可以通过 jump() 方法跳转到其他 Fragment。

对于都绑定在同一个 Activity 的多个 Fragment 中,可以使用以下代码进行切换:

jump(1);    //1是BaseFragment在BaseActivity中添加时的索引 //或者使用已绑定的实例化Fragment对象进行跳转: jump(me.introductionFragment);  

这里用到了一个关键词 “me”,me 在 BaseFramework 中指向当前 Activity 的实例化对象,在 BaseFragment 中则指向已绑定的 BaseActivity 对象,上边我们提到,在 BaseFragment 设置了泛型的情况下,就可以通过 me 关键词直接指向绑定的 BaseActivity 中的 public 修饰的成员。

Fragment之间传递消息

传递消息

从一个 Fragment 跳转到另一个 Fragment,我们希望携带一些数据,或者从 Fragment 跳转到另一个 Fragment,在返回本 Fragment 时获得一些回传的数据,这些场景在 Activity 中非常常见,但在 Fragment 中却一直是个问题,BaseFramework 的 BaseFragment 则可以轻松实现这些逻辑。

在使用jump()方法跳转到其他 Fragment 时,你可以利用第二个参数传递消息:

jump(2, new JumpParameter()     .put("action", "This is a message.") );

value 可以接受任何类型的数据。

回传消息

如果我们想在从目标 Fragment 切换回来时获取回传数据,我们也可以在跳转前设置回调:

jump(2, new JumpParameter()                 .put("action", "This is a message."), new OnJumpResponseListener() {                         public void OnResponse(JumpParameter jumpParameter) {                 String response = jumpParameter.getString("response");                 ...             }         } );

在切换到目标 Fragment 里可以使用setResponse(JumpParameter);设置回传数据:

setResponse(new JumpParameter().put("response", "This is a response.");

再次返回原 Fragment 后就会收到回传消息了。

BaseFragment的额外生命周期

BaseFragment 还提供了额外的生命周期事件:

onShow 方法

用于替代onResume方法。

进入 Fragment 时调用此方法,isSwitchFragment 标记说明了是否为从别的 Fragment 切换至此 Fragment 的,若为 false,则有可能是从后台切换至前台触发

 public void onShow(boolean isSwitchFragment) {     log("Fragment: onShow"); }

onHide方法

用于在 Fragment 切换后原 Fragment 被隐藏时触发。

 public void onHide() {     log("Fragment: onHide");     super.onHide(); }

尾巴

BaseFragment 是 BaseFramework 框架中的一部分,主要目的是用来解决 Fragment 使用过程中的一些麻烦的问题,并封装了很多便于使用的方法和工具。BaseFragment 还拥有更多好用的功能,详情可以参考开发文档,更建议去看看 Demo 中的代码,都有详尽的注释,非常易懂。

Kongzue BaseFramework 开发框架目的旨在减少重复复杂的开发流程,提供更简单易用的开发方案,但又不干涉开发过程中的开发模式(MVP、MVVM 等)也欢迎大家尝试,提出建议,如有遇到任何问题也欢迎通过 issues 来提出反馈。

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 基于 BaseFramework 的 Fragment 显示、管理、事件及消息传递求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们