Android之EventBus初体验

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaxiazaizai01/article/details/52948630

EventBus对大家来说肯定都不陌生,EventBus是一款针对Android优化的发布/订阅事件总线。平时我们在写Fragment和Activity之间传递数据时,一般都是通过定义接口或者发送广播等等实现。我用的最多的就是定义接口来传递数据,早就听说使用EventBus非常优雅并且体积小,重点是将接收者与发送者解耦。今天任务不多,就来撸个demo感受下EventBus的魅力。
先看效果图
这里写图片描述
在使用EventBus之前我们需要导入,下面给出地址:https://github.com/greenrobot/EventBus/

首先在Gradle中添加:

compile ‘org.greenrobot:eventbus:3.0.0’

接下来我们就可以开始体验了,使用也非常简单

在onCreate()中注册EventBus

EventBus.getDefault().register(this);

有注册就有取消注册,在onDestroy()中取消注册

EventBus.getDefault().unregister(this);

关于EventBus的介绍网上有很多,我就不啰嗦了,直接进入主题,通过一个测试demo说一下怎么快速使用它。模拟的场景是这样的:在MainActivity中我们定义一个TextView和一个Button,一个用来接收OtherActivity传过来的数据消息,一个作跳转操作。而在OtherActivity中主要做的操作就是通过EventBus的post()方法传递消息,这里传递一个字符串。

首先我们定义一个Event类

public class MyFirstEvent {
    private String info;

    public MyFirstEvent(String info){
        this.info = info;
    }

    public String getInfo(){
        return info;
    }
}

接下来看看我们的MainActivity,用来接收消息的

public class MainActivity extends AppCompatActivity {

    private Button btn;
    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("MainActivity");
        //注册EventBus
        EventBus.getDefault().register(this);

        btn = (Button) findViewById(R.id.btn);
        textView = (TextView) findViewById(R.id.tv);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this,OtherActivity.class);
                startActivity(intent);
            }
        });
    }

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

    @Subscribe
    public void onInfoEvent(MyFirstEvent event){
        //接收到OtherActivity传递过来的消息
        String info = event.getInfo();
        textView.setText(info);
    }
}

从上面代码可以看到我们定义了一个onInfoEvent(MyFirstEvent event)方法,EventBus 3.0之后需要在方法名的上面添加注解@Subscribe,表明此方法是以onEvent开头的方法,所以,这里的方法名就可以随意取名了。之前版本的方法名都是以onEvent开头的,这是因为我们在注册的时候EventBus.getDefault().register(this);这个register就是用来遍历此类中的所有方法,找到onEvent开头的然后进行存储。

然后看一下OtherActivity中都做了什么

public class OtherActivity extends AppCompatActivity {

    private Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_other);
        setTitle("OtherActivity");

        btn = (Button) findViewById(R.id.btn2);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                EventBus.getDefault().post(new MyFirstEvent("接收到了OtherActivity传递过来的消息"));
                finish();
            }
        });
    }
}

此Activity是用来发送消息的,在此activity中不用去注册EventBus,使用起来是不是灰常灰常简单,,如果我们想传递一个List集合,那么我们就需要在自定义MyFirstEvent类中这样做,这里我就不测试了,采用泛型的方式,方便修改List集合中的类型

public class MyFirstEvent<T> {

    private List<T> lists;

    public MyFirstEvent(List<T> lists){
        this.lists = lists;
    }

    public List<T> getInfoList(){
        return lists;
    }
}

就简单的介绍到这里吧,如果你还没有体验过EventBus的话,那还等什么,,赶紧撸起。。。

猜你喜欢

转载自blog.csdn.net/xiaxiazaizai01/article/details/52948630