安卓任意两个或多个Fragment之间的交互与刷新界面
平时项目中遇到一个问题:在子fragment中刷新父fragment的界面,通俗的说也就是在任何一个fragment中来刷新另一个fragment。大家都知道activity和fragment之间的交互可以通过接口回调和bundle来实现,但是这种fragment之间的实时刷新就有些困难了。
原创作品,未经允许禁止转载,转载请注明来自:http://www.cnblogs.com/jiangbeixiaoqiao/
经过上网查阅,目前网上还没有比较靠谱全面有效的方式来实现,基本都是通过activity作为中间媒介进行传值,但是这会遇到一个问题,就是activity—>fragment传值时fragment是都新加的(add或者repalce),并不是之前就存在的fragment,所以与我所讲的不是一回事。这里讲的是所有的fragment都是加载完毕的,存在回退栈中,来实时刷新回退栈中的fragment。话不多说,上代码,主要实现原理是通过安卓的广播机制来实现的。
首先,在需要进行刷新更新UI的fragment中注册广播接收器:
/**
* 注册广播接收器
*/
private void registerReceiver() {
broadcastManager = LocalBroadcastManager.getInstance(getActivity());
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("jerry");
broadcastManager.registerReceiver(mAdDownLoadReceiver, intentFilter);
} //原创作品,未经允许禁止转载,转载请注明来自:http://www.cnblogs.com/jiangbeixiaoqiao/
private BroadcastReceiver mAdDownLoadReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String change = intent.getStringExtra("change");
if ("yes".equals(change)) {
// 这地方只能在主线程中刷新UI,子线程中无效,因此用Handler来实现
new Handler().post(new Runnable() {
public void run() {
//在这里来写你需要刷新的地方
//例如:testView.setText("恭喜你成功了");
}
});
}
}
}; /**
* 注销广播
*/
@Override
public void onDetach() {
super.onDetach();
broadcastManager.unregisterReceiver(mAdDownLoadReceiver);
}
在需要进行刷新更新UI的fragment中的onCreate方法中进行广播的注册:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mActivity = (MainActivity) getActivity();
//注册广播
registerReceiver();
}
在子fragment中发送广播来实现刷新另一个fragment,这里我用button的点击来举例:
btn_change.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
//本文来自原创:http://www.cnblogs.com/jiangbeixiaoqiao/
Intent intent = new Intent("jerry");
intent.putExtra("change", "yes");
LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(intent);
}
});
至此,就实现了所说的任意fragment之间进行刷新,只需要在需要刷新的fragment中注册一个广播即可,简单吧。PS:只要广播监听器
intentFilter.addAction("jerry");一样,就可以实现一次刷新多个fragment,欢迎朋友们留言交流~ 感觉有用的朋友动动您的小手推荐一下,非常感谢。
原创作品,未经允许禁止转载,转载请注明来自:http://www.cnblogs.com/jiangbeixiaoqiao/
安卓任意两个或多个Fragment之间的交互与刷新界面的更多相关文章
- Fragment之间的交互
通常,一个活动可能包含一个或多个协同工作的Fragment以向用户展现一致的UI.在这种情况下,Fragment之间就需要彼此通信并交换数据,这是非常重要的.例如,一个Fragment可能包含了一个条 ...
- Android中Fragment与Activity之间的交互(两种实现方式)
(未给Fragment的布局设置BackGound) 之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文<Android中Fragment的两种创建方式>,就如 ...
- Poj The xor-longest Path 经典题 Trie求n个数中任意两个异或最大值
Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 5646 Accepted: 1226 Description In an ...
- 【编程题目】有 4 张红色的牌和 4 张蓝色的牌,主持人先拿任意两张,再分别在 A、B、C 三人额头上贴
第 22 题(推理):有 4 张红色的牌和 4 张蓝色的牌,主持人先拿任意两张,再分别在 A.B.C 三人额头上贴任意两张牌,A.B.C 三人都可以看见其余两人额头上的牌,看完后让他们猜自己额头上是什 ...
- [百度]数组A中任意两个相邻元素大小相差1,在其中查找某个数
一.问题来源及描述 今天看了July的微博,发现了七月问题,有这个题,挺有意思的. 数组A中任意两个相邻元素大小相差1,现给定这样的数组A和目标整数t,找出t在数组A中的位置.如数组:[1,2,3,4 ...
- DirectX:函数可以连接任意两个filter
函数可以连接任意两个filter HRESULT ConnectFilters( IBaseFilter *pSrc, IBaseFilter *pDest ) { IPin *pIn = 0; IP ...
- hdu 4630 查询[L,R]区间内任意两个数的最大公约数
No Pain No Game Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- 谷歌面试题:输入是两个整数数组,他们任意两个数的和又可以组成一个数组,求这个和中前k个数怎么做?
谷歌面试题:输入是两个整数数组,他们任意两个数的和又可以组成一个数组,求这个和中前k个数怎么做? 分析: "假设两个整数数组为A和B,各有N个元素,任意两个数的和组成的数组C有N^2个元素. ...
- 南大算法设计与分析课程OJ答案代码(1)中位数附近2k+1个数、任意两数之和是否等于给定数
问题1 用来测试的,就不说了 问题2:中位数附近2k+1个数 给出一串整型数 a1,a2,...,an 以及一个较小的常数 k,找出这串数的中位数 m 和最接近 m 的小于等于 m 的 k 个数,以及 ...
随机推荐
- php yii .htaccess
RewriteEngine on # if a directory or a file exists, use it directlyRewriteCond %{REQUEST_FILENAME} ! ...
- substring函数——sql
--substring( expression, start, length ) expression待截取的文字 start 截取位置的起始下标 length 要截取的长度 --左边第一个字符的下标 ...
- sublime3 常用功能总结
介绍几个常见的功能: l 自动完成:自动完成的快捷键是Tab和Enter,如果在html文件中,输入cl按下tab或Enter,即可自动补全为class=””:加上zencoding后,更是如虎添翼, ...
- BOM浏览器对象模型和API速查
什么是BOMBOM是Browser Object Model的缩写,简称浏览器对象模型BOM提供了独立于内容而与浏览器窗口进行交互的对象由于BOM主要用于管理窗口与窗口之间的通讯,因此其核心对象是wi ...
- oracle 回收站管理
oracle10g,在pl/sql中选中删除后会出现类似:BIN$nJ5JuP9cQmqPaArFei384g==$0的表. 1.查看回收站 select * from user_recyclebin ...
- CSS HACK区别IE6、IE7、IE8、Firefox兼容性
相信不少人,都特别清楚CSS HACK,而其中也是区别IE6.IE7.IE8.Firefox兼容性问题用的,CSS hack由于不同的浏览器,对CSS的解析认识不一样,因此会导致生成的页面效果不一样. ...
- mysql explain中key_len的计算
ken_len表示索引使用的字节数,根据这个值,就可以判断索引使用情况,特别是在组合索引的时候,判断是否所有的索引字段都被查询用到. key_len显示了条件检索子句需要的索引长度,但 ORDER B ...
- HDU 5437 Alisha’s Party
题意:有k个人带着价值vi的礼物来,开m次门,每次在有t个人来的时候开门放进来p个人,所有人都来了之后再开一次门把剩下的人都放进来,每次带礼物价值高的人先进,价值相同先来先进,q次询问,询问第n个进来 ...
- C# Adding Hyperlink to Windows Form z
When creating a Windows form in C#, we would like to create a hyperlink so that when the user click ...
- CCMoveTo 等函数理解
CCMoveTo: 使用CCMoveTo action来让对象从右侧屏幕外移动到屏幕左侧.注意可以通过指定duration参数控制这一过程需要多久,这里我们随机给他2-4秒的时间. CCCallFun ...