EventBus是一个非常实用的工具,个人感觉在某种程度上是可以替代广播的,之前没有用过EventBus,今天看了下,做了个小的demo,了解下功能的实现。
这边做了三个Activity,在三个Activity中做界面操作。
具体看代码:
第一步:gradle中添加依赖
compile 'org.greenrobot:eventbus:3.0.0'
第二步,代码中使用
MainActivity:
public class MainActivity extends AppCompatActivity { private Button btn_login; private TextView tv_status; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
//注册EventBus EventBus.getDefault().register(this); btn_login = (Button) findViewById(R.id.btn_login); tv_status= (TextView) findViewById(R.id.tv_login_result); btn_login.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(MainActivity.this,RegistActivity.class); startActivity(intent); } }); }@Subscribe //订阅事件FirstEvent public void onEventMainThread(MessageEvent event){ String msg=event.getMessage(); tv_status.setText(""+msg);//获取事件中传递的参数 }@Override protected void onDestroy() { super.onDestroy();
//解除注册 EventBus.getDefault().unregister(this); } }
xml:
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="opcv.test.com.eventtest.MainActivity"> <Button android:id="@+id/btn_login" android:layout_width="wrap_content" android:layout_height="40dp" android:layout_marginBottom="455dp" android:layout_marginTop="5dp" android:text="登录" android:textSize="12sp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"/> <TextView android:id="@+id/tv_login_result" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" android:text="登录结果显示" app:layout_constraintTop_toBottomOf="@+id/btn_login"/> </android.support.constraint.ConstraintLayout>
MessageEvent:
public class MessageEvent { private String message; public MessageEvent(String message ){ this.message=message; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
RegistActivity代码:public class RegistActivity extends AppCompatActivity { private TextView name; private TextView pwd; private Button submit; private TextView register; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.regist_activity); EventBus.getDefault().register(this); register = (TextView) findViewById(R.id.btn_register); submit = (Button) findViewById(R.id.btn_ok); register.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(RegistActivity.this,LoginActivity.class); startActivity(intent); } }); } @Subscribe //订阅事件FirstEvent public void onEventMainThread(MessageEvent event){ String msg = event.getMessage(); if (msg.equals("成功!")){ Log.d("RegistActivity", "onEventMainThread: "+msg); RegistActivity.this.finish(); } } @Override protected void onDestroy() { super.onDestroy(); EventBus.getDefault().unregister(this); } }xml:<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="0px" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" android:orientation="vertical" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintVertical_bias="0.0" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="10dp" android:orientation="horizontal"> <Button android:id="@+id/btn_register" android:layout_width="wrap_content" android:layout_height="30dp" android:layout_gravity="center_horizontal" android:layout_marginTop="10dp" android:background="@drawable/btn_bg" android:text="注册" android:textColor="#ffffff" android:textSize="12sp"/> <Button android:id="@+id/btn_ok" android:layout_width="wrap_content" android:layout_height="30dp" android:layout_gravity="center_horizontal" android:layout_marginLeft="10dp" android:layout_marginTop="10dp" android:background="@drawable/btn_bg" android:text="确定" android:textColor="#ffffff" android:textSize="12sp"/> </LinearLayout> </LinearLayout> </android.support.constraint.ConstraintLayout>
LoginActivity:
public class LoginActivity extends AppCompatActivity { private TextView name; private TextView pwd; private Button submit; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.login_activity); name = (TextView) findViewById(R.id.et_name); pwd = (TextView) findViewById(R.id.et_pwd); submit = (Button) findViewById(R.id.btn_ok); submit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (name.getText().toString().trim().equals("")) { EventBus.getDefault().post(new MessageEvent("用户名为空")); finish(); } else if (pwd.getText().toString().trim().equals("")) { EventBus.getDefault().post(new MessageEvent("密码为空")); finish(); } else { EventBus.getDefault().post(new MessageEvent("成功!")); finish(); } } }); } }
xml:
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="0px" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" android:layout_marginTop="244dp" android:orientation="vertical" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent"> <EditText android:id="@+id/et_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/edit_shap" /> <EditText android:id="@+id/et_pwd" android:layout_marginTop="5dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/edit_shap" /> <Button android:id="@+id/btn_ok" android:layout_width="wrap_content" android:layout_marginTop="10dp" android:layout_height="30dp" android:text="确定" android:textSize="12sp" android:textColor="#ffffff" android:background="@drawable/btn_bg" android:layout_gravity="center_horizontal"/> </LinearLayout> </android.support.constraint.ConstraintLayout>
其他的资源文件就不上传了,不想写用默认的吧