【第三篇】学习 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 ())类似操作
相关文章
|
人工智能 安全 Cloud Native
阿里云事件总线 EventBridge 正式商业化,构建智能化时代的企业级云上事件枢纽
阿里云事件总线EventBridge自2020年发布以来,致力于构建统一的事件枢纽,支持微服务架构演进。其核心特性包括稳定安全、高性能低成本、开放集成及统一事件标准,适用于EDA、流式ETL、AI数据集成等多种场景。EventBridge于2025年6月3日正式商业化,提供灵活计费模式,包括事件量和CU配额计费,帮助企业高效实现松耦合、分布式的事件驱动架构。
|
9月前
|
存储 Java 索引
(Python基础)新时代语言!一起学习Python吧!(二):字符编码由来;Python字符串、字符串格式化;list集合和tuple元组区别
字符编码 我们要清楚,计算机最开始的表达都是由二进制而来 我们要想通过二进制来表示我们熟知的字符看看以下的变化 例如: 1 的二进制编码为 0000 0001 我们通过A这个字符,让其在计算机内部存储(现如今,A 字符在地址通常表示为65) 现在拿A举例: 在计算机内部 A字符,它本身表示为 65这个数,在计算机底层会转为二进制码 也意味着A字符在底层表示为 1000001 通过这样的字符表示进行转换,逐步发展为拥有127个字符的编码存储到计算机中,这个编码表也被称为ASCII编码。 但随时代变迁,ASCII编码逐渐暴露短板,全球有上百种语言,光是ASCII编码并不能够满足需求
363 4
|
消息中间件 负载均衡 NoSQL
Redis系列学习文章分享---第七篇(Redis快速入门之消息队列--List实现消息队列 Pubsub实现消息队列 stream的单消费模式 stream的消费者组模式 基于stream消息队列)
Redis系列学习文章分享---第七篇(Redis快速入门之消息队列--List实现消息队列 Pubsub实现消息队列 stream的单消费模式 stream的消费者组模式 基于stream消息队列)
429 0
|
数据可视化 前端开发 容器
Twaver-HTML5基础学习(41)列表可视化视图组件(List)
本文介绍了如何在Twaver-HTML5中使用列表可视化视图组件(List),展示了如何创建列表、设置列表属性(如行高、间隔颜色等)、实现数据绑定和排序,以及如何通过React代码示例进行操作。
336 2
Twaver-HTML5基础学习(41)列表可视化视图组件(List)
|
Android开发
Android面试高频知识点(1) 图解Android事件分发机制
Android面试高频知识点(1) 图解Android事件分发机制
|
Android开发
Android面试高频知识点(1) 图解 Android 事件分发机制
Android面试高频知识点(1) 图解 Android 事件分发机制
266 1
|
Android开发
Android 事件分发机制详细解读
Android 事件分发机制详细解读
324 5
|
XML 前端开发 Android开发
Android面试高频知识点(1) 图解Android事件分发机制
Android面试高频知识点(1) 图解Android事件分发机制
Android面试高频知识点(1) 图解Android事件分发机制
|
消息中间件 JavaScript 中间件
中间件事件总线事件定义
【6月更文挑战第20天】
356 2
中间件事件总线事件定义
|
Android开发
Android面试高频知识点(1) 图解 Android 事件分发机制
在Android开发中,事件分发机制是一块Android比较重要的知识体系,了解并熟悉整套的分发机制有助于更好的分析各种点击滑动失效问题,更好去扩展控件的事件功能和开发自定义控件,同时事件分发机制也是Android面试必问考点之一,如果你能把下面的一些事件分发图当场画出来肯定加分不少。废话不多说,总结一句:事件分发机制很重要。
658 9