zoukankan      html  css  js  c++  java
  • 【第三篇】学习 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())类似操作
  • 相关阅读:
    第三十一篇 玩转数据结构——并查集(Union Find)
    第三十篇 玩转数据结构——字典树(Trie)
    开发Electron可能用到的工具
    最新NetMonitor代码
    用C++/CLI搭建C++和C#之间的桥梁
    xaml实现无边框窗口
    用xaml画的带阴影3D感的圆球
    创作了一个xml的替代格式
    域名投资入门和技巧
    Compaq Visual Fortran生成静态库的方法及使用
  • 原文地址:https://www.cnblogs.com/androidsuperman/p/4633283.html
Copyright © 2011-2022 走看看