android activity与多个fragment之间的瓜葛
来源:互联网 发布:webpack node env 编辑:程序博客网 时间:2024/05/22 00:11
activity与fragment加载并传递参数实践
- activity 加载基础fragment
- fragment 传递参数给activity
- activity 传递参数给fragment
- fragment 替换另一个fragment(replace)
- fragment 回退栈处理
activity 加载基础fragment
使用 fragmentManage来进行fragment的加载
fragmentManager = getSupportFragmentManager(); android.support.v4.app.FragmentTransaction tx =fragmentManager.beginTransaction(); //加载fragment1 if (fragment1 == null) { fragment1 = new TravelMessageFragment1(); tx.add(R.id.travelInit, fragment1); tx.addToBackStack(null); tx.commit(); }
注意:activity 加载每个fragment 时 必须使用不同的事务,所以每次添加或替换必须再声明次 FragmentTransaction
如下所示:
android.support.v4.app.FragmentTransaction tx =fragmentManager.beginTransaction(); fragment2 = new TravelMessageFragment2(); tx.replace(R.id.travelInit, fragment2); tx.addToBackStack(null); tx.commit();
fragment 传递参数给activity
可以使用2种方式进行传递
- 使用广播方式
- 使用回调机制 (可以查看 android回调机制 )
这里就不介绍回调机制如何处理了,着重看数据如何传递
public interface TravelMessageFragmentListener{ //添加fragment2 void addFragment2(HashMap saveData); }
这里的saveData 就是需要传递的数据,需要做2件事
- fragment 确定什么时候发起传输数据到activity
- activity 怎么接收该数据并替换为另一个fragment并传递参数给这个fragment
这里的activity需要实现该接口并重写该方法
public void addFragment2 (HashMap saveData) { initToolBar(); android.support.v4.app.FragmentTransaction tx =fragmentManager.beginTransaction(); fragment2 = new TravelMessageFragment2(); tx.replace(R.id.travelInit, fragment2); tx.addToBackStack(null); tx.commit(); fragment2.putData(saveData); }
activity 传递参数给fragment
这里可以使用fragment2.putData(saveData);
来传递数据
fragment 替换另一个fragment(replace)
android.support.v4.app.FragmentTransaction tx =fragmentManager.beginTransaction(); fragment2 = new TravelMessageFragment2(); tx.replace(R.id.travelInit, fragment2); tx.addToBackStack(null); tx.commit();
这里要注意 FragmentTransaction 这个类
在用fragment替换另一个fragment时 要注意
FragmentTransaction 必须再次声明,不然会报
java.lang.IllegalStateException: commit already called
fragment 回退栈处理
fragment 需要记住2个方法
- getBackStackEntryCount
- popBackStack
一个是回退栈的个数 从1开始
另一个是模拟安卓返回键
默认返回栈定元素(peek操作)
所以后退的代码可以如下表示
public void skipBackView(View view) { if(is_can_back == true) { //finish(); if(fragmentManager.getBackStackEntryCount() > 1) { fragmentManager.popBackStack(); }else { finish(); } } }
获取安卓回退事件(onKeyDown)代码如下:
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK ) { if(is_can_back) { if(fragmentManager.getBackStackEntryCount() > 1) { fragmentManager.popBackStack(); }else { finish(); } } } return false; }
1 0
- android activity与多个fragment之间的瓜葛
- android Activity与Fragment之间的通信
- android开发fragment、Activity与Activity之间的值传递
- Android中Fragment与Fragment,Fragment与Activity之间的通信
- Android面试篇之Activity与Fragment、Fragment与Fragment之间的通信
- Android ——fragment 与Activity 之间的通信
- Android进阶之Fragment与Activity之间的数据交互
- Android之---Activity与Fragment之间的传值问题
- Android Fragment与Activity之间的数据交换(Fragment从Activity获取数据)
- Android Fragment与Activity之间的数据交换(Fragment从Activity获取数据)
- Activity与Fragment,以及Fragment与Fragment之间的数据通讯
- Activity与Fragment,Fragment与Fragment之间的通信
- android中fragment与activity之间通信
- Android-Activity与Fragment之间传递数据
- android Fragment与Activity之间数据交互
- activity与fragment之间的数据交互
- Fragment,Activity与 FragmentActivity之间的关系
- Fragment与Activity之间的互访
- 每天一个linux命令(50):crontab命令
- 作业的一个网页
- 10、索引库的查询四之:Lucene的高级搜索技术
- 【数据结构】堆与堆排序
- Linux C 线程与竞争
- android activity与多个fragment之间的瓜葛
- php安装指南
- MySQL常量查询
- 一个2年安卓开发者的一些忠告
- GreenDao3.0升级数据库
- Linux - chown 中的 -R 参数
- 一个简单的放大镜功能
- 强制刷新浏览器调用的js和css以及js清除浏览器缓存的几种方法
- break和continue区别