【第三篇】学习 android 事件总线androidEventbus之list数据事件的传递,发送list数据事件到另外一个Activity
这个和普通的事件总线的发送接收一样。
-
1 package com.example.mysimpleeventbus; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import org.simple.eventbus.EventBus; 7 import org.simple.eventbus.Subscriber; 8 import org.simple.eventbus.ThreadMode; 9 10 import android.content.Intent; 11 import android.os.Bundle; 12 import android.support.v7.app.ActionBarActivity; 13 import android.util.Log; 14 import android.view.View; 15 import android.view.View.OnClickListener; 16 import android.widget.Button; 17 import android.widget.Toast; 18 19 public class MainActivity extends ActionBarActivity implements OnClickListener { 20 21 private Button button; 22 private Button ansyBtn; 23 private Button ansy1Btn; 24 private Button sendListBtn; 25 26 @Override 27 protected void onCreate(Bundle savedInstanceState) { 28 super.onCreate(savedInstanceState); 29 setContentView(R.layout.activity_main); 30 initView(); 31 // 1 首先注册事件总线 32 EventBus.getDefault().register(this); 33 } 34 35 private void initView() { 36 button = (Button) findViewById(R.id.button); 37 ansyBtn = (Button) findViewById(R.id.ansyBtn); 38 ansy1Btn = (Button) findViewById(R.id.ansy1Btn); 39 sendListBtn = (Button) findViewById(R.id.sendListBtn); 40 41 button.setOnClickListener(this); 42 ansyBtn.setOnClickListener(this); 43 ansy1Btn.setOnClickListener(this); 44 sendListBtn.setOnClickListener(this); 45 } 46 47 @Override 48 protected void onDestroy() { 49 super.onDestroy(); 50 EventBus.getDefault().unregister(this); 51 } 52 53 @Override 54 public void onClick(View view) { 55 switch (view.getId()) { 56 case R.id.button: 57 58 postSticky(); 59 60 break; 61 62 case R.id.ansyBtn: 63 64 postAnsy(); 65 66 break; 67 case R.id.ansy1Btn: 68 69 postAnsyInMainActivity(); 70 71 break; 72 case R.id.sendListBtn: 73 74 // postListDate(); 75 postListToOtherActivity(); 76 break; 77 default: 78 break; 79 } 80 } 81 82 private void postListToOtherActivity() { 83 List<User> users = new ArrayList<User>(); 84 User user; 85 for (int i = 0; i < 10; i++) { 86 user = new User("帅哥" + i, "清华大学"); 87 users.add(user); 88 } 89 90 EventBus.getDefault().postSticky(users); 91 gotoOtherActivity(); 92 } 93 94 /** 95 * List数据的传递 96 */ 97 private void postListDate() { 98 List<User> users = new ArrayList<User>(); 99 User user; 100 for (int i = 0; i < 10; i++) { 101 user = new User("帅哥" + i, "清华大学"); 102 users.add(user); 103 } 104 105 EventBus.getDefault().post(users); 106 } 107 108 @Subscriber 109 private void reveiveList(List<User> users) { 110 for (int i = 0; i < users.size(); i++) { 111 Toast.makeText(getApplicationContext(), users.get(i).toString(), Toast.LENGTH_SHORT).show(); 112 } 113 } 114 115 /** 116 * Ansy事件传递,多个Activity之间必须postSticky 117 */ 118 private void postAnsy() { 119 // 将目标函数执行在异步线程中 120 EventBus.getDefault().postSticky(new User("soyoungboy", "西安财经学院"), 121 "ansy"); 122 gotoOtherActivity(); 123 } 124 125 /** 126 * 在本Activity中进行Ansy事件发布操作 127 */ 128 private void postAnsyInMainActivity() { 129 EventBus.getDefault().post(new User("soyoungboy", "西安财经学院"), "ansy"); 130 } 131 132 /** 133 * 在本Activity中进行Ansy事件接受操作 134 * 135 * @param user 136 */ 137 @Subscriber(tag = "ansy", mode = ThreadMode.ASYNC) 138 private void ansy(User user) { 139 Log.i("user", user.toString()); 140 Log.i("ThreadName", Thread.currentThread().getName()); 141 } 142 143 private void postSticky() { 144 // 2 发送Sticky事件 145 EventBus.getDefault().postSticky(new User("soyoungboy", "西安财经学院"), 146 "soyoungboy"); 147 148 gotoOtherActivity(); 149 } 150 151 private void gotoOtherActivity() { 152 // 跳转页面 153 Intent intent = new Intent(MainActivity.this, OtherActivity.class); 154 startActivity(intent); 155 } 156 }
当然也可以在不同Activity之间进行事件总线的传递,不过要使用postSticky
发送:
-
1 private void postListToOtherActivity() { 2 List<User> users = new ArrayList<User>(); 3 User user; 4 for (int i = 0; i < 10; i++) { 5 user = new User("帅哥" + i, "清华大学"); 6 users.add(user); 7 } 8 9 EventBus.getDefault().postSticky(users); 10 gotoOtherActivity(); 11 }
另外个Activity中:
接收:
-
1 //获取另外一个Activity的list数据 2 @Subscriber 3 private void reveiveList(List<User> users) { 4 for (int i = 0; i < users.size(); i++) { 5 Toast.makeText(getApplicationContext(), users.get(i).toString(), 6 Toast.LENGTH_SHORT).show(); 7 } 8 // 删除事件,否则会出现重复的响应事件 9 EventBus.getDefault().removeStickyEvent(users.getClass()); 10 }
,当然可以通过tag的方式,来对事件进行过滤(无论在当前Activity还是跳转到其他Activity中接收的时候进行过滤),注意两边一定要一致,发送没tag,接收就别弄tag相关,重要的事情只说一遍,还有就是一个Acitivity内的无需删除的操作,而多个则必须加上EventBus.getDefault().removeStickyEvent(users.getClass())类似操作。