【第三篇】学习 android 事件总线androidEventbus之list数据事件的传递,发送list数据事件到另外一个Activity...

这个和普通的事件总线的发送接收一样。

  1.   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.  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.  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 ())类似操作

转载于:https://www.cnblogs.com/androidsuperman/p/4633283.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值