安卓任意两个或多个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/
posted @ 2016-12-23 13:58  江北小乔  阅读(9398)  评论(1编辑  收藏  举报