在BaseActivity增加EventBus让项目组件与后台线程间通信更便捷之实战篇

1.关于EventBus就是几个字概括:简化各组件间的通信

2.先添加依赖包。

implementation 'org.greenrobot:eventbus:3.0.0'

3.定义一个EventBusBaseActivity。注:为啥这样做呢?为了防止在工作中疏忽,关闭activity时未注销,产生问题。

/***
 * 带有EventBusBaseActivity
 */
public abstract class EventBusBaseActivity extends Activity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(initLayout());
        initView();
        initData();

    }
    //初始化EventBus,并注册EventBus
    public void initEventBus(boolean isOpen) {
        EventBus.getDefault().register(this);

    }

    //初始化加载布局
    public   abstract int initLayout();
    //初始化布局View
    public   abstract void initView();
    //初始化数据及调用方法
    public   abstract void initData();

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //解除EventBus注册
        if(EventBus.getDefault().isRegistered(this)) {
            EventBus.getDefault().unregister(this);
        }
    }
}

3.定义一个消息事件类。注以下界面及实操都参照鸟哥笔记来模仿的

/***
 * 鸟哥笔记资料对象
 */
public class NiaoGeBiJiInformationInfo {
    //昵称
    private String name;
    //累计阅读数
    private String readNum;
    //获得勋章数
    private String medalNum;
    //可用羽毛数
    private String featherNum;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getReadNum() {
        return readNum;
    }

    public void setReadNum(String readNum) {
        this.readNum = readNum;
    }

    public String getMedalNum() {
        return medalNum;
    }

    public void setMedalNum(String medalNum) {
        this.medalNum = medalNum;
    }

    public String getFeatherNum() {
        return featherNum;
    }

    public void setFeatherNum(String featherNum) {
        this.featherNum = featherNum;
    }
}

4.需要处理事件的界面以下为列子。注:实操非Demo所以界面写的比较复杂,还望新手耐心阅读

我需要让界面修改昵称、累计阅读数、勋章数、可用羽毛数。

/**
 * 此Demo界面仿照乌哥笔记临摹
 */
public class ImitateNiaoGeBiJiActivity extends EventBusBaseActivity implements View.OnClickListener {
    private ImageView avatarIv;
    private TextView nameTv;
    private TextView readNumIv;
    private TextView medalNumIv;
    private TextView featherNumIv;
    @Override
    public int initLayout() {
        return R.layout.activity_niaogebiji;
    }

    @Override
    public void initView() {
        avatarIv=findViewById(R.id.mine_avatar_iv);
        nameTv=findViewById(R.id.mine_name_tv);
        readNumIv=findViewById(R.id.mine_read_num_tv);
        medalNumIv=findViewById(R.id.mine_medal_num_tv);
        featherNumIv=findViewById(R.id.mine_feather_num_tv);

    }

    @Override
    public void initData() {
        //绑定点击事件
        avatarIv.setOnClickListener(this);
        //注册EventBus
        initEventBus(true);

    }
    //需要更新的数据
    @Subscribe(threadMode = ThreadMode.MAIN)
    public  void updateInformation(NiaoGeBiJiInformationInfo info){
        nameTv.setText(info.getName());
        readNumIv.setText(info.getReadNum());
        medalNumIv.setText(info.getMedalNum());
        featherNumIv.setText(info.getFeatherNum());

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.mine_avatar_iv:
                //跳转至设置信息 activity
                Intent eventBusIntent=new Intent(this,SetInformationActivity.class);
                startActivity(eventBusIntent);
                break;
        }

    }
}

5.以下为模拟修改用户资料的处理事件处理

/***
 * 模拟设置信息功能模块
 */
public class SetInformationActivity extends BaseActivity implements View.OnClickListener {
    private ImageView backIv;
    private TextView saveIv;
    private EditText nameEdt;
    private EditText redNumEdt;
    private EditText medalNumEdt;
    private EditText featherNumEdt;
    @Override
    public int initLayout() {
        return R.layout.activity_set_information;
    }

    @Override
    public void initView() {
        backIv= findViewById(R.id.set_information_back_iv);
        saveIv= findViewById(R.id.set_information_save_iv);
        nameEdt= findViewById(R.id.set_information_name_edt);
        redNumEdt= findViewById(R.id.set_information_red_num_edt);
        medalNumEdt= findViewById(R.id.set_information_medal_num_edt);
        featherNumEdt= findViewById(R.id.set_information_feather_num_edt);

    }

    @Override
    public void initData() {
        //绑定监听
        backIv.setOnClickListener(this);
        saveIv.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.set_information_back_iv:
                finish();
                break;
            case R.id.set_information_save_iv:
                //通过EventBus传输数据
                NiaoGeBiJiInformationInfo info=new NiaoGeBiJiInformationInfo();
                //设置昵称
                info.setName(nameEdt.getText().toString().trim());
                //设置阅读数
                info.setReadNum(redNumEdt.getText().toString().trim());
                //设置勋章数
                info.setMedalNum(medalNumEdt.getText().toString().trim());
                //设置羽毛数
                info.setFeatherNum(featherNumEdt.getText().toString().trim());
                EventBus.getDefault().post(info);
                finish();
                break;
        }

    }
}

6.以下为实际效果图仅供参考谢谢:

发布了4 篇原创文章 · 获赞 14 · 访问量 5839

猜你喜欢

转载自blog.csdn.net/we5525008/article/details/104700574
今日推荐