EventBus-------事件公交车--原理

本文探讨了EventBus的原理,通过一个实际的Android应用示例,阐述了如何在Activity之间使用EventBus进行事件传递。首先,介绍如何在接收者Activity中注册和接收事件,以此来实现组件间的通信。
摘要由CSDN通过智能技术生成

首先创建第一个activity 谁是接受着谁去注册

package com.example.mr.xiangmu2_ecentbus;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;

public class MainActivity extends AppCompatActivity {

    private Button tiao;
    private TextView tel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //注册
        EventBus.getDefault().register(this);
        //获取控件
        tiao = findViewById(R.id.tiao);
        tel = findViewById(R.id.tel);
         //点击事件
        tiao.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //getApplicationContext()----内类上下文与MainActivity.this寓意一样
                Intent intent = new Intent(getApplicationContext(), Main2Activity.class);
                startActivity(intent);
            }
        });
    }
    //注解为主线程----获取传送过来的值
    @Subscribe(threadMode = ThreadMode.MAIN)
     public void fangfa(FirstEven eveen){
        tel.setText(eveen.getMsgg());
     }

   /*
   * 销毁后注销此注册
   * */
    @Override
    protected void onDestroy() {
        super.onDestroy();
        //注销
        EventBus.getDefault().unregister(this);
    }
}
 
第二个activity负责的是接到命令点击将值传送给接收者
package com.example.mr.xiangmu2_ecentbus;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import org.greenrobot.eventbus.EventBus;

public class Main2Activity extends AppCompatActivity {

    private Button chuan;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        //获取控件
        chuan = findViewById(R.id.chuan);

            chuan.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    EventBus.getDefault().post(
                            new FirstEven("长江以北,欣姐最美")
                    );
                    finish();
                }
            });


    }
}
创建封装类好比是车厢,将数据传送到车厢,
package com.example.nianxingshijian;

/**
 * Created by Mr赵 on 2017/12/27.
 */

public class FirstEven {
    private String Msgg;

    public FirstEven(String s) {
        Msgg = s;
    }

    public String getMsgg() {
        return Msgg;
    }

}
 
粘性事件跟普通事件差不多都是接收者去注册--首先第一个activity是传送者,点击传送一个数据
 
package com.example.nianxingshijian;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

import org.greenrobot.eventbus.EventBus;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    public void fasong(View view){
        EventBus.getDefault().postSticky(new FirstEven("啊里看见啥书空间的发生口角打发时间看"));
        Intent intent = new Intent(MainActivity.this, Main2Activity.class);
        startActivity(intent);
    }
}
 
第二个是接收者
package com.example.nianxingshijian;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;

public class Main2Activity extends AppCompatActivity {

    private Button tiao;
    private TextView tel;
   private boolean flag=true;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        tiao = findViewById(R.id.tiao);
        tel = findViewById(R.id.tel);
        //创建点击事件
        tiao.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(flag){
                    EventBus.getDefault().register(this);
                    flag=false;
                }
            }
        });


    }

    @Subscribe(threadMode = ThreadMode.MAIN,sticky = true)
    public void fangfa(FirstEven eveen){
        tel.setText(eveen.getMsgg());
    }



    /*
   * 销毁后注销此注册
   * */
    @Override
    protected void onDestroy() {
        super.onDestroy();
        //注销
        EventBus.getDefault().unregister(this);

        EventBus.getDefault().removeAllStickyEvents();
    }



}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
abp-vnex eventbus是一个用于在ABP框架中进行事件通信的模块。要使用abp-vnex eventbus,您需要按照以下步骤进行安装和配置: 1. 首先,您需要安装abp-vnex eventbus模块。可以通过运行以下命令来安装: ```shell npm install abp-vnex-eventbus --save ``` 2. 安装完成后,您需要在您的应用程序的模块中导入abp-vnex eventbus模块。在您的模块文件中,添加以下代码: ```typescript import { AbpVnexEventBusModule } from 'abp-vnex-eventbus'; @NgModule({ imports: [ AbpVnexEventBusModule ] }) export class YourModule { } ``` 3. 现在,您可以在您的组件或服务中使用abp-vnex eventbus来发送和接收事件。首先,您需要导入`AbpVnexEventBusService`: ```typescript import { AbpVnexEventBusService } from 'abp-vnex-eventbus'; ``` 4. 在您的组件或服务中,您可以使用`AbpVnexEventBusService`的`emit`方法来发送事件。例如,发送一个名为`myEvent`的事件: ```typescript constructor(private eventBus: AbpVnexEventBusService) { } sendEvent() { this.eventBus.emit('myEvent', { data: 'Hello World' }); } ``` 5. 要接收事件,您可以使用`AbpVnexEventBusService`的`on`方法。在您的组件或服务中,添加以下代码: ```typescript constructor(private eventBus: AbpVnexEventBusService) { } ngOnInit() { this.eventBus.on('myEvent').subscribe((eventData) => { console.log(eventData.data); // 输出:Hello World }); } ``` 这样,您就可以使用abp-vnex eventbus模块来进行事件通信了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值