本文主要是介绍EventBus黏性事件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
除了之前讲的普通事件外,EventBus还支持发送黏性事件。何为黏性事件呢?简单讲,就是在发送事件之后再订阅该事件也能收到该事件,跟黏性广播类似。
本程序为EventBus的黏性事件
代码框架
效果演示
实现步骤
关于EventBus的关联
见http://blog.csdn.net/dubuwucool/article/details/53523318
接收窗体布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<Button
android:id="@+id/btn_ok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="由主页面跳转到发送事件的页面"
android:textSize="30sp"/>
<TextView
android:id="@+id/txtShow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="展示EventBus发送过来的数据"
android:layout_centerHorizontal="true"
android:layout_below="@+id/btn_ok"/>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<Button
android:id="@+id/btn_ok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="由主页面跳转到发送事件的页面"
android:textSize="30sp"/>
<TextView
android:id="@+id/txtShow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="展示EventBus发送过来的数据"
android:layout_centerHorizontal="true"
android:layout_below="@+id/btn_ok"/>
</RelativeLayout>
发送窗体布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<EditText
android:id="@+id/edt_Show"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:lines="5"
/>
<Button
android:id="@+id/btn_Send"
android:layout_below="@+id/edt_Show"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="向主界面发送一个eventBus事件"
android:textSize="30sp"/>
</RelativeLayout>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<EditText
android:id="@+id/edt_Show"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:lines="5"
/>
<Button
android:id="@+id/btn_Send"
android:layout_below="@+id/edt_Show"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="向主界面发送一个eventBus事件"
android:textSize="30sp"/>
</RelativeLayout>
黏性消息类
public class EventBusStickMessage {
public String Message;
public EventBusStickMessage(String message){
public String Message;
public EventBusStickMessage(String message){
Message =message;
}
}
}
发送窗体代码
package com.dubuwucool.eventbus2;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import org.greenrobot.eventbus.EventBus;
public class SendActivity extends AppCompatActivity implements View.OnClickListener {
private Button btn_Send;
private EditText edt_Show;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_send);
//初始化控件
initView();
}
private void initView() {
btn_Send = (Button) findViewById(R.id.btn_Send);
btn_Send.setOnClickListener(this);
edt_Show = (EditText) findViewById(R.id.edt_Show);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_Send:
//获得输入的值
String content = edt_Show.getText().toString();
//通过黏性事件将值传到MainActivity窗体中
EventBus.getDefault().postSticky(new EventBusStickMessage(content));
Intent intent = new Intent(SendActivity.this, MainActivity.class);
startActivity(intent);
break;
}
}
}
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import org.greenrobot.eventbus.EventBus;
public class SendActivity extends AppCompatActivity implements View.OnClickListener {
private Button btn_Send;
private EditText edt_Show;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_send);
//初始化控件
initView();
}
private void initView() {
btn_Send = (Button) findViewById(R.id.btn_Send);
btn_Send.setOnClickListener(this);
edt_Show = (EditText) findViewById(R.id.edt_Show);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_Send:
//获得输入的值
String content = edt_Show.getText().toString();
//通过黏性事件将值传到MainActivity窗体中
EventBus.getDefault().postSticky(new EventBusStickMessage(content));
Intent intent = new Intent(SendActivity.this, MainActivity.class);
startActivity(intent);
break;
}
}
}
接收窗体代码
package com.dubuwucool.eventbus2;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
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 implements View.OnClickListener {
private Button btn_ok;
private TextView txtShow;
boolean isTrue = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件
initView();
}
private void initView() {
btn_ok = (Button) findViewById(R.id.btn_ok);
txtShow = (TextView) findViewById(R.id.txtShow);
btn_ok.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_ok:
//加一个标识,进行判断,让用户不会因多次点击按钮而注册,从而导致崩溃
if (isTrue) {
//你一旦注册eventBus就会接收消息
EventBus.getDefault().register(this);
isTrue = false;
}
break;
}
}
//接收消息 添加注解 如果是黏性事件 将stick设置为true
@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
public void receiveMessage(EventBusStickMessage eventBusStickMessage) {
txtShow.setText(eventBusStickMessage.Message);
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
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 implements View.OnClickListener {
private Button btn_ok;
private TextView txtShow;
boolean isTrue = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件
initView();
}
private void initView() {
btn_ok = (Button) findViewById(R.id.btn_ok);
txtShow = (TextView) findViewById(R.id.txtShow);
btn_ok.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_ok:
//加一个标识,进行判断,让用户不会因多次点击按钮而注册,从而导致崩溃
if (isTrue) {
//你一旦注册eventBus就会接收消息
EventBus.getDefault().register(this);
isTrue = false;
}
break;
}
}
//接收消息 添加注解 如果是黏性事件 将stick设置为true
@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
public void receiveMessage(EventBusStickMessage eventBusStickMessage) {
txtShow.setText(eventBusStickMessage.Message);
}
//在onDestory()方法中取消订阅:防止内存溢出
@Override
protected void onDestroy() {
//移除所有黏性事件
EventBus.getDefault().removeAllStickyEvents();
//销毁EventBus
EventBus.getDefault().unregister(this);
super.onDestroy();
}
}
protected void onDestroy() {
//移除所有黏性事件
EventBus.getDefault().removeAllStickyEvents();
//销毁EventBus
EventBus.getDefault().unregister(this);
super.onDestroy();
}
}
由此便完成了EventBus黏性事件使用
这篇关于EventBus黏性事件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!