事件回调 和通知方式的总结(EventBus框架的使用)

来源:互联网 发布:linux编写c语言 编辑:程序博客网 时间:2024/06/05 10:01

基本介绍 和使用方式:

http://www.jianshu.com/p/a040955194fc
https://juejin.im/entry/570ae5668ac247004c3128a4

使用的情景:

通常在user 退出或者登陆时 通知各个界面进行刷新。 或者当数据完成后通知

因为是根据传入的对象进行回调的,所以可以选择 String 类型 判断字符串的标记值 进行针对性的刷新界面!

传统事件通知方式:

1.Activity 和子 fragment间(adapter 和 Acitivity间 等等)可以通过 定义回调函数的方式进行交互

1.自定义回调 在 A类中 定义 接口 和接口方法,并在需要进行回调的地方 使用该方法

public class A_Fragment extends BaseFragment {    private onSwitchpaperListener onSwitchpaperListener;    //定义接口和接口方法    public interface onSwitchpaperListener{       void  switchpaper(int i);    }     //对外提供一个设置监听的方法。    public void setOnSwichtpaerListener(onSwitchpaperListener listener){        this.onSwitchpaperListener=listener;    }     @Override    public void intiEvent() {                               if(onSwitchpaperListener!=null){                     onSwitchpaperListener.switchpaper(position);                 }else {                 }    }}

在B fragment中 实现具体的操作逻辑,并传入A 中所需要的参数:

   mainActivity.getAFragment().setOnSwichtpaerListener(new Slidingleft_Fragment.onSwitchpaperListener() {            @Override            public void switchpaper(int i) {                BaseCenterPaper currentPaper= baseCenterPaperList.get(i);                tv_title.setText(lists.get(i).getTitle());                //先移除                fl.removeAllViews();                currentPaper.initData();                fl.addView(currentPaper.getRoot());            }        });



2.Activity StartActivityForResult之间的回调通知 。

主要是两个参数 resultcode  requedecode

请求码用来判断是从那个Activity 发出的 resultcode 用来判断 是从哪个Acitivity返回的

这样 在 onActivityResult 方法中就能准却判断

  @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {      if (requestCode == Contants.REQUEST_CODE && resultCode == this.RESULT_OK) {            Log.d("登录后mainActivity执行回调","ture");            new Thread() {                public void run() {                    //这儿是耗时操作,完成之后更新UI;                    runOnUiThread(new Runnable(){                        @Override                        public void run() {                            //通知子view g                            if (user != null) {                                //更新mine                                refrushMineView();                                //更新购物车                                refrushShopCarView();                            }                            else {                            }                        }                    });                }            }.start();        }        if (requestCode == 2 && resultCode == 2) {            Log.d("购物车执行回调","ture");            new Thread() {                public void run() {                    //这儿是耗时操作,完成之后更新UI;                    runOnUiThread(new Runnable(){                        @Override                        public void run() {                            //通知子view g                            if(user!=null)                            {                                 refrushShopCarView();                            }                            else {                            }                        }                    });                }            }.start();        }         if (user != null) {            //跳转至目标Activity            if (MyApplication.getInstance(this).getIntent() == null) {            }            else {                MyApplication.getInstance(this).jumpToTargetActivity(this);            }        }        else {        }    }

注意事项!

onBack()回退方法! 要在super.onBack 之前 setResult 不然会无效, 所得值一直是0


3.handler方式不赘述

4.发送广播



原创粉丝点击