EventBus简单使用

public class MainActivity extends AppCompatActivity {

    private TextView text_view;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        text_view = findViewById(R.id.text_view);

    }

}

    创建一个bean类 作为发送的数据
 EventBus.getDefault().post(new ToastEvent("这是发送过来的数据"));

         //注册
         EventBus.getDefault().register(this);
/**
 * 具体注册了对什么事件的订阅,这个需要onEvent()方法来说明
 * @param toastEvent
 *
 * ThreadMode.MAIN不管消息在哪里发送 都在主线程接收这个事件
 *  ThreadMode.BACKGROUND
 *  Async处理事件会开启一个新的线程 这种模式可以耗时操作
 */
@Subscribe(threadMode = ThreadMode.MAIN,priority = 1000)
public void onToastEvent(ToastEvent toastEvent) {//参数就是订阅的事件(其实就是传递数据的类)
        //Toast.makeText(this,toastEvent.getContent(),Toast.LENGTH_SHORT).show();
        //取消事件的传送
        EventBus.getDefault().cancelEventDelivery(toastEvent);
        button.setText(toastEvent.getContent());
        }

/**
 * 粘性事件
 */
public class ThirdActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_third);
    }


    public void post(View view) {
        //发送的是粘性事件
        EventBus.getDefault().postSticky(new ToastEvent("粘性事件的发送"));
    }


    public void dingyue(View view) {
        EventBus.getDefault().register(this);


    }


    @Subscribe(threadMode = ThreadMode.MAIN,sticky = true)
    public void onToastEvent(ToastEvent toastEvent) {
        Toast.makeText(this,toastEvent.getContent(),Toast.LENGTH_SHORT).show();
    }


    public void yiChu(View view) {
        //移除
        EventBus.getDefault().removeStickyEvent(ToastEvent.class);
        EventBus.getDefault().removeAllStickyEvents();
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();


        EventBus.getDefault().unregister(this);
    }

    public class MainActivity extends AppCompatActivity {




        private Button button;


        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);


            button = findViewById(R.id.button);


            //注册事件
            EventBus.getDefault().register(this);


            getSupportFragmentManager().beginTransaction().replace(R.id.frame_content,new DingYueFragment()).commit();


        }


        /**
         * 具体注册了对什么事件的订阅,这个需要onEvent()方法来说明
         * @param toastEvent
         *
         * ThreadMode.MAIN不管消息在哪里发送 都在主线程接收这个事件
         *  ThreadMode.BACKGROUND
         *  Async处理事件会开启一个新的线程 这种模式可以耗时操作
         */
        @Subscribe(threadMode = ThreadMode.MAIN,priority = 1000)
        public void onToastEvent(ToastEvent toastEvent) {//参数就是订阅的事件(其实就是传递数据的类)
            //Toast.makeText(this,toastEvent.getContent(),Toast.LENGTH_SHORT).show();
            //取消事件的传送
            EventBus.getDefault().cancelEventDelivery(toastEvent);


            button.setText(toastEvent.getContent());


        }


        //接触事件的订阅
        @Override
        protected void onDestroy() {
            super.onDestroy();


            EventBus.getDefault().unregister(this);
        }


        public void tiaoZhuan(View view) {


            Intent intent = new Intent(this,SecondActivity.class);
            startActivity(intent);
        }
    }

EventBus是一个开源的发布-订阅式的事件总线库。下面是一个简单EventBus使用的代码示例: 1. 首先,需要在项目中引入EventBus库。可以通过Gradle或Maven等构建工具添加依赖。 2. 定义事件类。创建一个Java类,作为事件的载体,可以包含需要传递的数据。 ```java public class MessageEvent { private String message; public MessageEvent(String message) { this.message = message; } public String getMessage() { return message; } } ``` 3. 注册事件订阅者。在需要接收事件的地方注册订阅者,并指定订阅的事件类型。例如,在Activity的onCreate方法中注册: ```java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); EventBus.getDefault().register(this); } ``` 4. 定义事件订阅者的处理方法。在订阅者中定义处理事件的方法,方法需要加上@Subscribe注解,并指定事件类型。 ```java @Subscribe public void onMessageEvent(MessageEvent event) { String message = event.getMessage(); // 处理事件 } ``` 5. 发布事件。在需要发送事件的地方,创建一个事件对象,并使用EventBus的post方法发布事件。 ```java EventBus.getDefault().post(new MessageEvent("Hello EventBus!")); ``` 6. 取消事件订阅。在不需要接收事件的地方,取消注册订阅者。例如,在Activity的onDestroy方法中取消注册: ```java @Override protected void onDestroy() { super.onDestroy(); EventBus.getDefault().unregister(this); } ``` 以上就是一个简单EventBus使用代码示例。通过事件的发布和订阅,可以实现不同组件之间的解耦,方便数据传递和通信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值