• 安卓任意两个或多个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/
  • 相关阅读:
    djinn:1 Vulnhub Walkthrough
    面试题:HTTP协议工作原理
    面试题:URI和URL的区别
    面试题:http和https的区别?什么是http无状态协议?什么是本地存储?
    Vue+Element 踩坑记录
    面试题:Vue的生命周期
    面试题:组件封装
    面试题:vuex
    面试题:callback
    面试题---华为机试在线训练:字符串最后一个单词的长度
  • 原文地址:https://www.cnblogs.com/jiangbeixiaoqiao/p/6214557.html
Copyright © 2020-2023  润新知