美文网首页
Eventbus(页面之间的传值)的简单使用

Eventbus(页面之间的传值)的简单使用

作者: 君袅 | 来源:发表于2019-02-19 15:42 被阅读0次

简述:
简单的说就是可以再整个应用中传递数据和广播该概念差不大,一个人发送别的人都可以申请获取
EventBus 是一款在 Android 开发中使用的发布/订阅事件总线框架,基于观察者模式,将事件的接收者和发送者分开,简化了组件之间的通信,使用简单、效率高、体积小!下边是官方的 EventBus 原理图:

image

依赖

  implementation 'org.greenrobot:eventbus:3.1.1

代码

本页面之间传值

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
/**
 * eventbus
 * <p>
 * 1.注册
 * 2.取消注册
 * 3.订阅事件的接收
 * 4.发送事件
 */
    private Button bt;
    private TextView tv;

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

    private void initView() {
        bt = (Button) findViewById(R.id.bt);
        tv = (TextView) findViewById(R.id.tv);

        bt.setOnClickListener(this);
    }

    //接收订阅的事件
   @Subscribe(threadMode = ThreadMode.MAIN)
    public void onMsgEvent(MsgEvent event){
        tv.setText(event.getContent());
    }

    @Override
    protected void onStart() {
        super.onStart();
        //注册
        EventBus.getDefault().register(this);
    }

    @Override
    protected void onStop() {
        super.onStop();
        //取消注册
        EventBus.getDefault().unregister(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.bt:
                 EventBus.getDefault().postSticky(new MsgEvent(111,"如果我们不曾相遇,你会是在哪里"));   //发送时间

                 Intent intent = new Intent( MainActivity.this, Main2Activity.class);
                 startActivity(intent);
                break;
        }
    }

MsgEvent实体类

public class MsgEvent {

    private int id;
    private String content;

    @Override
    public String toString() {
        return "MsgEvent{" +
                "id=" + id +
                ", content='" + content + '\'' +
                '}';
    }

    public MsgEvent(int id, String content) {
        this.id = id;
        this.content = content;
    }

    public int getId() {

        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}

第二个activity申请传值

public class Main2Activity extends AppCompatActivity {

    private TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        initView();
    }
    @Subscribe(sticky = true,threadMode = ThreadMode.MAIN)    //申请订阅(在不同activity)
    public void onMsgEvent(MsgEvent event){
        tv.setText(event.getContent());
    }

    @Override
    protected void onStart() {    //注册
        super.onStart();
        EventBus.getDefault().register(this);
    }

    @Override
    protected void onStop() {    //反注册
        super.onStop();
        EventBus.getDefault().unregister(this);
    }

    private void initView() {
        tv = (TextView) findViewById(R.id.tv);
    }
}

相关文章

网友评论

      本文标题:Eventbus(页面之间的传值)的简单使用

      本文链接:https://www.haomeiwen.com/subject/lzhfyqtx.html