【第三篇】学习 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 ())类似操作
相关文章
|
7月前
|
数据处理
利用Stream流将取到的对象List<对象>形式数据进行分组统计转变成Map<分组条件,数量统计>形式
利用Stream流将取到的对象List<对象>形式数据进行分组统计转变成Map<分组条件,数量统计>形式
66 0
|
19天前
|
大数据 UED
「Mac畅玩鸿蒙与硬件16」鸿蒙UI组件篇6 - List 和 Grid 组件展示数据列表
List 和 Grid 是鸿蒙开发中的核心组件,用于展示动态数据。List 适合展示垂直或水平排列的数据列表,而 Grid 则适用于展示商品或图片的网格布局。本篇将展示如何封装组件,并通过按钮实现布局切换,提升界面的灵活性和用户体验。
56 9
「Mac畅玩鸿蒙与硬件16」鸿蒙UI组件篇6 - List 和 Grid 组件展示数据列表
|
3月前
|
Python
Python量化炒股的获取数据函数— get_billboard_list()
Python量化炒股的获取数据函数— get_billboard_list()
46 0
|
3月前
|
Java API 开发者
代码小妙招:用Java轻松获取List交集数据
在Java中获取两个 `List`的交集可以通过 `retainAll`方法和Java 8引入的流操作来实现。使用 `retainAll`方法更为直接,但会修改原始 `List`的内容。而使用流则提供了不修改原始 `List`、更为灵活的处理方式。开发者可以根据具体的需求和场景,选择最适合的方法来实现。了解和掌握这些方法,能够帮助开发者在实际开发中更高效地处理集合相关的问题。
105 1
|
6月前
|
消息中间件 JavaScript 中间件
中间件事件总线事件定义
【6月更文挑战第20天】
64 2
中间件事件总线事件定义
|
4月前
|
Python
【Pandas】Pandas的DataFrame按行插入list数据或者读取一行并存为csv文件
本文提供了使用Pandas库对DataFrame进行操作的示例代码。
222 0
|
5月前
|
NoSQL Java Redis
Redis09-----List类型,有序,元素可以重复,插入和删除快,查询速度一般,一般保存一些有顺序的数据,如朋友圈点赞列表,评论列表等,LPUSH user 1 2 3可以一个一个推
Redis09-----List类型,有序,元素可以重复,插入和删除快,查询速度一般,一般保存一些有顺序的数据,如朋友圈点赞列表,评论列表等,LPUSH user 1 2 3可以一个一个推
|
5月前
|
存储 语音技术 Python
语音识别,函数综合案例,黑马ATM,/t/t一个对不齐,用两个/t,数据容器入门,数据容器可以分为列表(list)、元组(tuple)、字符串(str)、集合(set)、字典(dict)
语音识别,函数综合案例,黑马ATM,/t/t一个对不齐,用两个/t,数据容器入门,数据容器可以分为列表(list)、元组(tuple)、字符串(str)、集合(set)、字典(dict)
|
7月前
使用Vant框架的组件van-pull-refresh搭配van-list和van-card完成上滑加载更多列表数据,下拉刷新当前列表数据(等同于翻页功能)
使用Vant框架的组件van-pull-refresh搭配van-list和van-card完成上滑加载更多列表数据,下拉刷新当前列表数据(等同于翻页功能)
|
7月前
判断2个list中是否有相同的数据(相交)Collections.disjoint
判断2个list中是否有相同的数据(相交)Collections.disjoint