老式Android中碎片Fragment之间的跳转和数据传递
随着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之间的跳转和数据传递相关推荐
- ios把数据传递到另一个页面_IOS 应用之间的跳转和数据传递详解
说明:本文介绍app如何打开另一个app,并且传递数据. 一.简单说明 新建两个应用,分别为应用A和应用B. 实现要求:在appA的页面中点击对应的按钮,能够打开appB这个应用. 1.新建两个应用, ...
- ios把数据传递到另一个页面_iOS 应用之间的跳转和数据传递
说明:本文介绍app如何打开另一个app,并且传递数据. 一.简单说明 新建两个应用,分别为应用A和应用B. 实现要求:在appA的页面中点击对应的按钮,能够打开appB这个应用. 1.新建两个应用, ...
- android studio 跳转后保留原页面数据_Intent详解以及Activity的跳转与数据传递
在上一次讲述Activity的时候,还有一个非常重要且常用的知识点没有讲,就是不同Activity之间的跳转和数据传递.我们在平常在使用app应用的时候,Activity的跳转和数据传递是经常会接触到 ...
- android home跳转,Android 中按home键和跳转到主界面的实例代码
Android 中按home键和跳转到主界面的实例代码 //home Intent intent= new Intent(Intent.ACTION_MAIN); intent.setFlags(In ...
- android fragment传递数据,Android 两个Fragment之间传递数据实例详解
Android 两个Fragment之间如何传递数据 FragmentA启动FragmentB,做一些选择操作后,返回FragmentA,需要把FragmentB里面选择的数据传回来.有什么办法? F ...
- Android清空Fragment缓存,如何在Android中清除Fragment Backstack
如何在Android中清除Fragment Backstack 您好如何清除片段回堆栈正在使用以下逻辑,它不起作用... for(int i = 0; i < mFragmentManager. ...
- android数据回传多个页面_Android Day06四大组件之Activity多页面跳转和数据传递
ToolBar中menu无法同时显示图标和文字问题的解决方法 Toolbar添加返回按钮 ToolBar与ActionBar 1.什么是Activity 官方文档是这么说的:Anwhich users ...
- ios把数据传递到另一个页面_iOS页面跳转及数据传递(三种)
iOS页面跳转: 第一种 [self.navigationController pushViewController:subTableViewController animated:YES]; //描 ...
- 【小程序】实现页面跳转和数据传递方案
文章目录 页面跳转和数据传递 wx的API跳转 navigator组件(了解) 页面跳转和数据传递 界面的跳转有两种方式:通过navigator组件 和 通过wx的API跳转 这里我们先以wx的API ...
最新文章
- Apache服务器部署(1)
- VS code 插件配置手册
- 入门单片机需要购买什么东西,学哪款单片机最好?
- python输入输出-python 输入输出 - 刘江的python教程
- 有了这套模板,女朋友再也不用担心我刷不动 LeetCode 了
- mysql user表修复_Mysql user表root用户误删除后恢复
- linux getline函数用法,get()与getline()
- 网页html修改,对学生信息进行修改网页html代码.doc
- 【LeetCode】【数组】题号:*54,螺旋数组
- ZigBee入门-CC2530-实验(一)-流水灯代码
- PID反馈控制-笔记
- WordPress资源源码网站源码下载/整站打包【带1200数据】
- (rec)机器人中的语音讲话TTS引擎
- COCO数据集转VOC之检测
- FreeIPA 4.7.0 服务端 部署
- 生成Xcode中各个尺寸的Mac App Icon
- HttpException: 503: Server Error for url:http://cic-1:9696/v2.0/security-groups, Service Unavailable
- 纽约大学文理学院转计算机专业,纽约大学文理学院内部转专业 看看你能否转专业...
- 关于旋转矩阵的左乘与右乘问题
- Keyboard Demo
热门文章
- com.android.sadk卸载不掉,Android的Service的两种方式以及使用
- oracle 优化逻辑读过高,详述逻辑读与arraysize的关系
- id3决策树 鸢尾花 python_决策树算法——集成学的基础!
- matlab矩阵乘法与打印
- 图像处理 区域删除_FotoWorks XL( 图像处理软件 )中文版分享
- setInterval和setTimeout的区别
- SSO 认证机制对比
- [转] SQL Server中变量的声明和使用方法
- Macbook pro安装MacOS系统
- eclipse项目转android studio详解