随着jetpack组件的使用,fragment之间的跳转和传值已经有相应的demo了。但是有时候难免不用Navigation,或者一些老项目的维护。这里,简单记录下老式fragment怎么跳转和传值。

/*** 从碎片fragment1跳转到碎片fragment2* * @param fragment1*            当前fragment* @param fragment2*            跳转后的fragment*/private void showFragment(Fragment fragment1, Fragment fragment2) {// 获取 FragmentTransaction  对象,// getParentFragmentManager()或者getChildFragmentManager()视情况而定FragmentTransaction transaction = getFragmentManager().beginTransaction();//如果fragment2没有被添加过,就添加它替换当前的fragment1if (!fragment2.isAdded()) {transaction.add(R.id.ma,fragment2)  //加入返回栈,这样你点击返回键的时候就会回退到fragment1了          .addToBackStack(null)// 提交事务.commitAllowingStateLoss();} else { //如果已经添加过了的话就隐藏fragment1,显示fragment2transaction// 隐藏fragment1,即当前碎片.hide(fragment1)// 显示已经添加过的碎片,即fragment2            .show(fragment2)// 加入返回栈                                                                  .addToBackStack(null)// 提交事务.commitAllowingStateLoss();}}

以上的代码很简单,都有注释,具体解释:

由碎片1跳到碎片2。 如果碎片2是第一次被添加,那么正常的用方法add(R.id.XX,
fragment2)替换当前碎片,加入当前碎片到返回栈,并提交事务;
如果碎片2已经被添加过了,那么就隐藏fragment1,显示fragment2。代码:hide(fragment1).show(fragment2)。同样加入当前碎片到返回栈并提交事务。


下面是调用上面的方法跳转并在两个碎片之间传递数据,当然有些类型需要自己实现serializable接口或者parcelable接口,具体的自己去看看bundle传值要求:

// 在Fragment1中创建Fragment2的实例
Fragment2  fragment2 = new Fragment2();
Bundle bundle = new Bundle();
// 传递实体类,需要实体类实现Serializable接口
bundle.putSerializable("key_entity", value_Entity);
// 传递字符串
bundle.putString("key_str",value_str);
// 传递int类型数
bundle.putInt("key_int",value_int);
//设置数据
fragment2.setArgument(bundle);
//调用上面的方法由 fragment1 跳转到 fragment2
showFragment(Fragment1.this, fragment2);

在Fragment2中拿数据的方法:

@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View view = inflater.inflate(R.layout.fragment_XXX, null);getTransitiveData();// 获取上一个碎片传递过来的数据return view;}private void getTransitiveData(){// 获取由碎片1传递过来的实体类数据Value_Entity value_Entity = (Value_Entity)getArgument.getSerializable("key_entity");// 获取由碎片1传递过来的String类型数据String value_str = (String)getArgument.getString("key_str");// 获取由碎片1传递过来的int类型数据int value_int = (String)getArgument.getInt("key_int");
}

当然,两个碎片之间传递数据的方式不只这种方式。也可以利用构造方法在两个碎片之间传递数据。

自己写返回按钮关闭fragment:

@Override
public void onBackPressed() {backTask();
}public void backTask() {if (getSupportFragmentManager().getBackStackEntryCount() ==1) {finish();}else {getSupportFragmentManager().popBackStack();}
}

需要自己判断是关闭activity还是关闭fragment。

老式Android中碎片Fragment之间的跳转和数据传递相关推荐

  1. ios把数据传递到另一个页面_IOS 应用之间的跳转和数据传递详解

    说明:本文介绍app如何打开另一个app,并且传递数据. 一.简单说明 新建两个应用,分别为应用A和应用B. 实现要求:在appA的页面中点击对应的按钮,能够打开appB这个应用. 1.新建两个应用, ...

  2. ios把数据传递到另一个页面_iOS 应用之间的跳转和数据传递

    说明:本文介绍app如何打开另一个app,并且传递数据. 一.简单说明 新建两个应用,分别为应用A和应用B. 实现要求:在appA的页面中点击对应的按钮,能够打开appB这个应用. 1.新建两个应用, ...

  3. android studio 跳转后保留原页面数据_Intent详解以及Activity的跳转与数据传递

    在上一次讲述Activity的时候,还有一个非常重要且常用的知识点没有讲,就是不同Activity之间的跳转和数据传递.我们在平常在使用app应用的时候,Activity的跳转和数据传递是经常会接触到 ...

  4. android home跳转,Android 中按home键和跳转到主界面的实例代码

    Android 中按home键和跳转到主界面的实例代码 //home Intent intent= new Intent(Intent.ACTION_MAIN); intent.setFlags(In ...

  5. android fragment传递数据,Android 两个Fragment之间传递数据实例详解

    Android 两个Fragment之间如何传递数据 FragmentA启动FragmentB,做一些选择操作后,返回FragmentA,需要把FragmentB里面选择的数据传回来.有什么办法? F ...

  6. Android清空Fragment缓存,如何在Android中清除Fragment Backstack

    如何在Android中清除Fragment Backstack 您好如何清除片段回堆栈正在使用以下逻辑,它不起作用... for(int i = 0; i < mFragmentManager. ...

  7. android数据回传多个页面_Android Day06四大组件之Activity多页面跳转和数据传递

    ToolBar中menu无法同时显示图标和文字问题的解决方法 Toolbar添加返回按钮 ToolBar与ActionBar 1.什么是Activity 官方文档是这么说的:Anwhich users ...

  8. ios把数据传递到另一个页面_iOS页面跳转及数据传递(三种)

    iOS页面跳转: 第一种 [self.navigationController pushViewController:subTableViewController animated:YES]; //描 ...

  9. 【小程序】实现页面跳转和数据传递方案

    文章目录 页面跳转和数据传递 wx的API跳转 navigator组件(了解) 页面跳转和数据传递 界面的跳转有两种方式:通过navigator组件 和 通过wx的API跳转 这里我们先以wx的API ...

最新文章

  1. Apache服务器部署(1)
  2. VS code 插件配置手册
  3. 入门单片机需要购买什么东西,学哪款单片机最好?
  4. python输入输出-python 输入输出 - 刘江的python教程
  5. 有了这套模板,女朋友再也不用担心我刷不动 LeetCode 了
  6. mysql user表修复_Mysql user表root用户误删除后恢复
  7. linux getline函数用法,get()与getline()
  8. 网页html修改,对学生信息进行修改网页html代码.doc
  9. 【LeetCode】【数组】题号:*54,螺旋数组
  10. ZigBee入门-CC2530-实验(一)-流水灯代码
  11. PID反馈控制-笔记
  12. WordPress资源源码网站源码下载/整站打包【带1200数据】
  13. (rec)机器人中的语音讲话TTS引擎
  14. COCO数据集转VOC之检测
  15. FreeIPA 4.7.0 服务端 部署
  16. 生成Xcode中各个尺寸的Mac App Icon
  17. HttpException: 503: Server Error for url:http://cic-1:9696/v2.0/security-groups, Service Unavailable
  18. 纽约大学文理学院转计算机专业,纽约大学文理学院内部转专业 看看你能否转专业...
  19. 关于旋转矩阵的左乘与右乘问题
  20. Keyboard Demo

热门文章

  1. com.android.sadk卸载不掉,Android的Service的两种方式以及使用
  2. oracle 优化逻辑读过高,详述逻辑读与arraysize的关系
  3. id3决策树 鸢尾花 python_决策树算法——集成学的基础!
  4. matlab矩阵乘法与打印
  5. 图像处理 区域删除_FotoWorks XL( 图像处理软件 )中文版分享
  6. setInterval和setTimeout的区别
  7. SSO 认证机制对比
  8. [转] SQL Server中变量的声明和使用方法
  9. Macbook pro安装MacOS系统
  10. eclipse项目转android studio详解