Android 消息传递EventBus的简单使用,加一个简单小实例。

前言

刚更新完公司的项目,然后今天准备写一写EventBus这个东西。然后从一个小的实例中来体现EventBus的方便。

名言
把脸一直向着阳光,这样就不会见到阴影。


EventBus简介

EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。

实例介绍

用户注册后直接把用户名和密码显示在登录的界面上。

效果图
这里写图片描述


首先我们要用EventBus我们先要将其导入,我们在项目的gradle里面

compile ‘org.greenrobot:eventbus:3.0.0’

然后我们看看2个界面的布局
MainActivity的布局activity_main.xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.beiduo.testmyeventbus.MainActivity">


    <EditText
        android:id="@+id/name"
        android:layout_width="match_parent"
        android:layout_height="44dp"
        android:layout_marginTop="25dp"
        android:hint="账号" />

    <EditText
        android:id="@+id/psd"
        android:layout_width="match_parent"
        android:layout_height="44dp"
        android:layout_marginTop="25dp"
        android:hint="密码" />


    <Button
        android:id="@+id/login"
        android:layout_width="match_parent"
        android:layout_height="44dp"
        android:layout_marginTop="25dp"
        android:text="登录" />

    <Button
        android:id="@+id/reigst"
        android:layout_width="match_parent"
        android:layout_height="44dp"
        android:layout_marginTop="25dp"
        android:text="注册" />

</LinearLayout>

TwoActivity的布局 activity_two.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_margin="16dp"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:id="@+id/name"
        android:layout_width="match_parent"
        android:layout_height="44dp"
        android:layout_marginTop="25dp"
        android:hint="账号" />

    <EditText
        android:id="@+id/psd"
        android:layout_width="match_parent"
        android:layout_height="44dp"
        android:layout_marginTop="25dp"
        android:hint="密码" />


    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="44dp"
        android:layout_marginTop="25dp"
        android:text="确定" />


</LinearLayout>

然后我们先把具体的逻辑写出来
MainActivity上面就是从MainActivity跳转到TwoActivity上。

public class MainActivity extends AppCompatActivity {

    private EditText name, psd = null;
    private Button button = null;

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

    public void initView() {
        name = (EditText) findViewById(R.id.name);
        psd = (EditText) findViewById(R.id.psd);
        button = (Button) findViewById(R.id.reigst);
    }

    public void setView() {
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, TwoActivity.class);
                startActivity(intent);
            }
        });
    }
   }

先定义一个事件的类型吧
这个意思就是里面放了一个密码和用户名。

public class LoginEvent {
    private String name = null;
    private String password = null;

    public LoginEvent(String name, String password) {
        this.name = name;
        this.password = password;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

然后接下来MainActivity我们需要注册一个订阅者

EventBus.getDefault().register(this);

在MainActivity里面当Acitivity销毁的时候我们需要取消订阅

EventBus.getDefault().unregister(this);

在MainActivity里面我们需要接受一个回来的事件

@Subscribe
    public void onEventMainThread(LoginEvent event) {
        String nameStr = event.getName();
        String psdStr = event.getPassword();
        if (!nameStr.equals("") && !psdStr.equals("")) {
            name.setText(nameStr);
            psd.setText(psdStr);
        } else {
            Toast.makeText(this, "错误参数!", Toast.LENGTH_SHORT).show();
        }
    }

所以我们MainActivity最终的代码就是

public class MainActivity extends AppCompatActivity {

    private EditText name, psd = null;
    private Button button = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //注册一个订阅者
        EventBus.getDefault().register(this);
        setContentView(R.layout.activity_main);
        initView();
        setView();
    }

    public void initView() {
        name = (EditText) findViewById(R.id.name);
        psd = (EditText) findViewById(R.id.psd);
        button = (Button) findViewById(R.id.reigst);
    }

    public void setView() {
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            //跳转到注册上面
                Intent intent = new Intent(MainActivity.this, TwoActivity.class);
                startActivity(intent);
            }
        });
    }

    @Subscribe
    public void onEventMainThread(LoginEvent event) {
        String nameStr = event.getName();
        String psdStr = event.getPassword();
        if (!nameStr.equals("") && !psdStr.equals("")) {
            name.setText(nameStr);
            psd.setText(psdStr);
        } else {
            Toast.makeText(this, "错误参数!", Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //activity销毁的时候取消订阅
        EventBus.getDefault().unregister(this);
    }
}

然后看看我们的第二个TwoActivity

public class TwoActivity extends AppCompatActivity {
    private EditText name, psd = null;
    private Button button = null;

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

    public void initView() {
        name = (EditText) findViewById(R.id.name);
        psd = (EditText) findViewById(R.id.psd);
        button = (Button) findViewById(R.id.button);
    }

    public void setView() {
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String nameStr = name.getText().toString();
                String pasStr = psd.getText().toString();
                if (!nameStr.equals("") && !pasStr.equals("")) {
                    //发送消息
                    EventBus.getDefault().post(new LoginEvent(nameStr, pasStr));
                    finish();
                } else {
                    Toast.makeText(TwoActivity.this, "输入内容不能为空的", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
}

通过这句话来发送消息

EventBus.getDefault().post(new LoginEvent(nameStr, pasStr));


这里就结束了是不是很简单呢?快试一试吧。希望有不对的地方指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值