Fragment 与DialogFragment 相互之间传递数据
场景:
步骤<1>在FragmentA 中触发显示DialogFragmentB,并传递参数数据mA2B给DialogFragmentB,在DialogFragmentB获取该参数--mA2B。
步骤<2>在DialogFragmentB中对传递的参数mA2B进行一些处理得到结果mB2A,最后点击“完成”,需要将mB2A回传给FragmentA中。
步骤<1><2>中的数据传递如何完成呢?
步骤<1>数据传递方法如下:
该步骤的中的数据传递与获取方式与一般的Fragment数据传递获取方式一样,就是利用Fragment的setArguments(Bundle bundle)方法进行数据传递(将需要传递的数据保存在Bundler对象中即可),利用Fragment的getArguments()来获取Bundle,从中取出数据即可。
从FragmentA中传递mA2B到DialogFragmentB:利用DialogFragmentB的setArguments()方法传递数据mA2B(将mA2B保存到Bundle对象中);
在DialogFragmentB获取mA2B: 在DialogFragmentB的onCreate()方法中调用getArguments(),获取Bundle对象,从中取出mA2B即可;
(1)在FragmentA中启动DialogFragmentB的代码如下:
DialogFragmentB fragmentB = DialogFragmentB.newInstance(mA2B);
fragmentB.setTargetFragment(FragmentA.this, FRAGMNET_A_2_FRAGMENT_B_REQUEST_CODE);
fragmentB.show(getChildFragmentManager(),DIALOG_FRAGMNET_B_TAG);
(2)DialogFragmentB的newInstance()方法如下:
public static DialogFragmentB newInstance(A2B a2b) { DialogFragmentB fragmentB = new DialogFragmentB(); Bundle bundle = new Bundle(); bundle.putSerializable(ARGUMENTS_A_2_B_KEY,a2b); filterFragment.setArguments(bundle); return fragmentB; }
(3) 在DialogFragmentB 的onCreate()方法获取mA2B,如下 :
@Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle bundle = getArguments(); if (bundle != null) { Object a2bObj = bundle.getSerializable(ARGUMENTS_A_2_B_KEY); mA2B = a2bObj instanceof A2B ? (A2B) tagInfoObj : null; } }
步骤<2>数据传递方法如下:
从DialogFragmentB中传递mB2A数据到FragmentA中,这里主要是利用DialogFragmentB的getTargetFrament().onActivityResult()方法。
(1)在DialogFragmentB中设置mB2A数据,以传递给FragmentA
if (getTargetFragment() != null) { Intent resultIntent = new Intent(); resultIntent.putExtra(ARGUMENTS_B_2_A_KEY,mB2A); getTargetFragment().onActivityResult(DialogFragmentB.FRAGMNET_A_2_Fragment_B_REQUEST_CODE, Activity.RESULT_OK, resultIntent); }
(2)在FragmentA的onActivityResult的方法中获取到mB2A
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case FRAGMNET_A_2_FRAGMENT_B_REQUEST_CODE: if (resultCode == Activity.RESULT_OK && data != null) {//获取从DialogFragmentB中传递的mB2ABundle bundle = data.getExtras(); if (bundle != null) { Object object = bundle.get(DialogFragmentB.ARGUMENTS_B_2_A_KEY); if (object instanceof B2A) { mB2A = (B2A) object; //to do other operation //to do xxxxxx } } } break; default: break; } }
Fragment 与DialogFragment 相互之间传递数据相关推荐
- Fragment传递数据
文章目录 Fragment与Activity之间 Activity向Fragment传递数据 通过构造方法的参数传递 代码示例 Fragment对外提供设置数据的方法,也就是public类型的方法 代 ...
- Fragment 之间传递数据
关于Fragment 之间的跳转这里就不再说了 有兴趣的可以看我的这边博客 Fragment 跳转 ,,,点击查看把 Fragment 跳转首先先跳转到宿主的Activity 上 这里以在同一个Act ...
- android fragment传递数据,Android 两个Fragment之间传递数据实例详解
Android 两个Fragment之间如何传递数据 FragmentA启动FragmentB,做一些选择操作后,返回FragmentA,需要把FragmentB里面选择的数据传回来.有什么办法? F ...
- 两个Fragment之间如何传递数据
FragmentA启动FragmentB,做一些选择操作后,返回FragmentA,需要把FragmentB里面选择的数据传回来.有什么办法? Fragment之间不能直接通信,必须通过Activit ...
- activity 点击后传递数据给fragment_Fragment 新特性 : Fragment Result API 使用以及源码分析
原标题: Android Fragments: Fragment Result 原文地址: https://proandroiddev.com/android-fragments-fragment-r ...
- Fragment与Activity传递数据
MainActivity如下: package cc.testsimplefragment0;import android.os.Bundle; import android.app.Activity ...
- android 基类fragment,Android DialogFragment 基类的定制
鸿洋博客介绍:DialogFragment的基本使用 好处: 1:使用DialogFragment来管理对话框,当旋转屏幕和按下后退键时可以更好的管理其声明周期,它和Fragment有着基本一致的生命 ...
- 【OpenGL】向Shader中传递数据
传递顶点属性信息 之前讲过,vertex shader会被每个顶点调用,通常一个顶点会包含很多信息,例如顶点坐标.顶点法向量.纹理坐标等等,我们称这些信息为顶点的属性.在之前的OpenGL版本里,每个 ...
- 【Flutter】Flutter 混合开发 ( 安卓端向 Flutter 传递数据 | FlutterFragment 数据传递 | FlutterActivity 数据传递 )
文章目录 前言 一.FlutterFragment 数据传递 二.FlutterActivity 数据传递 三.相关资源 前言 在上一篇博客 [Flutter]Flutter 混合开发 ( 关联 An ...
最新文章
- Ubuntu安装TensorFlow
- 科大星云诗社动态20201118
- MyEclipse完好提示配置
- python stdout stderr 一起输出_python – 使用subprocess.Popen()时,stderr和stdout没有输出
- Windows Communication Foundation from msdn
- jsp,jstl checkbox 回显方法
- java判断读到末尾_Java Web入门之java--第一节 java 简介及开发环境安装
- 第6集_奇点和安迪吃饭1 第一次见面
- CheckStyle检查规则模板说明
- ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案(转)
- 【POJ 1182】食物链【“拓展域”并查集】
- 觅风易语言[11-20]
- Centos 7 mysql 数据库安装和配置
- JSON字符串如何转化成对象?
- 处理 /home/china/.vimrc 时发生错误: 第1行: E492: 不是编辑器的命令
- python npv 计算公式_Python for NPV and IRR
- 加盐密码哈希:如何正确使用 (密码加密的经典文章)
- 用前端技术实现2d动画和特效(canvas)
- iMeta高被引论文|西农焦硕/韦革宏等-干旱生态系统中土壤真菌与细菌群落构建的关系...
- 原生js制作扫雷-自定义难度