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

简介: 这个和普通的事件总线的发送接收一样。 1 package com.example.mysimpleeventbus; 2 3 import java.util.ArrayList; 4 import java.

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

  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 ())类似操作
相关文章
|
4月前
|
XML 缓存 Android开发
Android开发,使用kotlin学习多媒体功能(详细)
Android开发,使用kotlin学习多媒体功能(详细)
134 0
|
1月前
|
JavaScript
Vue学习之--------全局事件总线(2022/8/22)
这篇文章介绍了Vue中全局事件总线(GlobalEventBus)的概念和使用方法,它允许不同组件之间进行通信。文章通过图解和代码实例详细解释了如何安装全局事件总线、在组件中接收和提供数据,以及如何在组件销毁前解绑事件,以避免潜在的内存泄漏问题。
Vue学习之--------全局事件总线(2022/8/22)
|
17天前
|
Android开发
Android学习 —— 测试init.rc中的条件触发的处理顺序
Android学习 —— 测试init.rc中的条件触发的处理顺序
|
4月前
|
监控 Unix 应用服务中间件
Android-音视频学习系列-(八)基于-Nginx-搭建(rtmp、http)直播服务器
Android-音视频学习系列-(八)基于-Nginx-搭建(rtmp、http)直播服务器
|
23天前
|
搜索推荐 Android开发
学习AOSP安卓系统源代码,需要什么样的电脑?不同配置的电脑,其编译时间有多大差距?
本文分享了不同价位电脑配置对于编译AOSP安卓系统源代码的影响,提供了从6000元到更高价位的电脑配置实例,并比较了它们的编译时间,以供学习AOSP源代码时电脑配置选择的参考。
42 0
学习AOSP安卓系统源代码,需要什么样的电脑?不同配置的电脑,其编译时间有多大差距?
|
3月前
|
消息中间件 JavaScript 中间件
中间件事件总线事件定义
【6月更文挑战第20天】
29 2
中间件事件总线事件定义
|
4月前
|
存储 定位技术 开发工具
Android 开发前的设计,Android之内存泄漏调试学习与总结
Android 开发前的设计,Android之内存泄漏调试学习与总结
|
4月前
|
Java Android开发 Dart
50家大厂面试万字精华总结android编程基础学习
50家大厂面试万字精华总结android编程基础学习
|
4月前
|
网络协议 Shell Android开发
Android 深入学习ADB调试原理(1)
Android 深入学习ADB调试原理(1)
185 1
|
4月前
|
算法 安全 Java
2024年Android最新知识体系最强总结(全方面覆盖Android知识结构,BAT面试&学习进阶)
2024年Android最新知识体系最强总结(全方面覆盖Android知识结构,BAT面试&学习进阶)