【第三篇】学习 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配额计费,帮助企业高效实现松耦合、分布式的事件驱动架构。
|
Android开发
Android面试题之Activity的启动模式和flag
Android Activity的四种启动模式:standard(默认,每次启动创建新实例),singleTop(栈顶复用,不走onCreate,调用onNewIntent),singleTask(栈内唯一,清除上方Activity)和singleInstance(单独栈内唯一)。启动模式在AndroidManifest.xml中配置,Intent Flags如FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_SINGLE_TOP可实现类似功能。了解这些对于处理Activity栈管理至关重要。
431 0
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
359 6
|
XML Android开发 数据格式
android中两个Activity同时设定了intent-filter的category为android.intent.category.LAUNCHER,会发生什么情况?
本文通过案例分析了在Android中当两个Activity都设置了`android.intent.category.LAUNCHER`类别时,会导致它们同时在应用启动器的"所有应用"页面显示为不同的启动入口。
582 2
android中两个Activity同时设定了intent-filter的category为android.intent.category.LAUNCHER,会发生什么情况?
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
Android面试高频知识点(4) 详解Activity的启动流程
465 3
|
缓存 前端开发 Android开发
Android实战之如何截取Activity或者Fragment的内容?
本文首发于公众号“AntDream”,介绍了如何在Android中截取Activity或Fragment的屏幕内容并保存为图片。包括截取整个Activity、特定控件或区域的方法,以及处理包含RecyclerView的复杂情况。
401 3
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
讲解Activity的启动流程了,Activity的启动流程相对复杂一下,涉及到了Activity中的生命周期方法,涉及到了Android体系的CS模式,涉及到了Android中进程通讯Binder机制等等, 首先介绍一下Activity,这里引用一下Android guide中对Activity的介绍:
471 4
|
消息中间件 JavaScript 中间件
中间件事件总线事件定义
【6月更文挑战第20天】
333 2
中间件事件总线事件定义
|
XML Android开发 数据格式
Android 中如何设置activity的启动动画,让它像dialog一样从底部往上出来
在 Android 中实现 Activity 的对话框式过渡动画:从底部滑入与从顶部滑出。需定义两个 XML 动画文件 `activity_slide_in.xml` 和 `activity_slide_out.xml`,分别控制 Activity 的进入与退出动画。使用 `overridePendingTransition` 方法在启动 (`startActivity`) 或结束 (`finish`) Activity 时应用这些动画。为了使前 Activity 保持静止,可定义 `no_animation.xml` 并在启动新 Activity 时仅设置新 Activity 的进入动画。
1025 12
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
236 0