Android EventBus(普通事件/粘性事件)详解

本文实例为大家分享了Android EventBus普通事件和粘性事件,供大家参考,具体内容如下

展示效果


添加EventBus导入依赖

compile 'org.greenrobot:eventbus:3.0.0'

主MainActivity方法

public class MainActivity extends AppCompatActivity {
  private Button button_t,button_d;
  private TextView tv_a;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    button_d=(Button)findViewById(R.id.button_d);
    button_d.setText("订阅");
    button_t=(Button)findViewById(R.id.button_t);
    button_t.setText("跳转到Bctivity");
    tv_a=(TextView)findViewById(R.id.tv_a);
    tv_a.setText("欢迎大家观看飞鸟96的博客");
    button_t.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
        startActivity(new Intent(MainActivity.this,MainBctivity.class));
      }
    });
    /*
    * 订阅事件
    * */
    button_d.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
        if(!EventBus.getDefault().isRegistered(MainActivity.this)) {
          EventBus.getDefault().register(MainActivity.this);
        }else{
          Toast.makeText(MainActivity.this, "请勿重复注册事件", Toast.LENGTH_SHORT).show();
        }
      }
    });
  }

  @Override
  protected void onDestroy() {
    super.onDestroy();
    /*
    * 取消注册事件
    * */
    EventBus.getDefault().unregister(MainActivity.this);
  }
  @Subscribe(threadMode = ThreadMode.MAIN)
  public void onMoonEvent(MessageEvent message){
    tv_a.setText(message.getMessage());
  }
  @Subscribe(sticky = true)
  public void onMoonEvents(MessageEvent message){
    tv_a.setText(message.getMessage());
  }
}

主MainBctivity方法

public class MainBctivity extends AppCompatActivity {
  private Button button_f,button_n;
  private TextView tv_b;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_bctivity);
    button_f=(Button)findViewById(R.id.button_f);
    button_f.setText("发送事件");
    button_n=(Button)findViewById(R.id.button_n);
    button_n.setText("粘性事件");
    tv_b=(TextView)findViewById(R.id.tv_b);
    tv_b.setText("MainBctivity");
    /*发送事件*/
    button_f.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
        EventBus.getDefault().post(new MessageEvent("飞鸟96博客祝你用的开心!"));
        finish();
      }
    });
    /*粘性事件*/
    button_n.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
        EventBus.getDefault().postSticky(new MessageEvent("开心开心开开心!!"));
        finish();
      }
    });

  }
}

MessageEvent(事件类)

public class MessageEvent {
  private String message;

  public MessageEvent(String message) {
    this.message = message;
  }

  public MessageEvent() {
  }

  public String getMessage() {
    return message;
  }

  public void setMessage(String message) {
    this.message = message;
  }
}

activity_main(MainActivity的布局)

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"
    android:layout_centerInParent="true"
    android:id="@+id/tv_a" />

  <Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="17dp"
    android:id="@+id/button_t"
    android:layout_below="@id/tv_a" />
  <Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="17dp"
    android:id="@+id/button_d"
    android:layout_below="@id/button_t" />

activity_main_bctivity(MainBctivity的布局)

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"
    android:layout_centerInParent="true"
    android:id="@+id/tv_b" />

  <Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="17dp"
    android:id="@+id/button_f"
    android:layout_below="@id/tv_b" />
  <Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="17dp"
    android:id="@+id/button_n"
    android:layout_below="@id/button_f" />

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • Android实现EventBus登录界面与传值(粘性事件)
  • Android 消息分发使用EventBus的实例详解
  • Android EventBus 3.0.0 使用总结(必看篇)
  • Android中使用开源框架eventbus3.0实现fragment之间的通信交互
  • Android之利用EventBus发送消息传递示例
  • Android 中 EventBus 的使用之多线程事件处理
(0)

相关推荐

  • Android 中 EventBus 的使用之多线程事件处理

    在这一系列教程的最后一篇中,我想谈谈GR的EventBus,在处理多线程异步任务时是多么简单而有效. AsyncTask, Loader和Executor-- 拜托! Android中有很多种执行异步操作的方法(指平行于UI线程的).AsyncTask对于用户来说是最简单的一种机制,并且只需要少量的设置代码即可.然而,它的使用是有局限的,正如Android官方文档中所描述的: AsyncTask被设计成为一个工具类,在它内部包含了Thread和Handler,但它本身并不是通用线程框架的一部分.

  • Android之利用EventBus发送消息传递示例

    一.概述 EventBus是一款针对Android优化的发布/订阅事件总线.主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅.以及将发送者和接收者解耦. 1.下载EventBus的类库 源码:EventBus_jb51.rar 2.基本使用 (1)自定义一个类,可以是空类,比如: public class AnyEventType { public AnyEventType(){} }

  • Android中使用开源框架eventbus3.0实现fragment之间的通信交互

    1.概述 在之前的博文中简单介绍过如何实现fragment之间的信息交互:<Android中Fragment与Activity之间的交互(两种实现方式)>,今天继续给大家介绍一种可以实现此效果的另外一种方式EventBus.(相比于handler,接口回调,bundle传参,这个简单好用到哭) EventBus是Android下高效的发布/订阅事件的消息总线.作用是可以代替传统的Intent,Handler,Broadcast或接口函数在Fragment.Activity.Service.线程

  • Android 消息分发使用EventBus的实例详解

    Android 消息分发使用EventBus的实例详解 1. AndroidStudio使用 dependencies { //最新版本 compile 'org.greenrobot:eventbus:3.0.0' //可以翻倍提高EventBus使用效率 provided 'de.greenrobot:eventbus-annotation-processor:3.0.0-beta1' } 2. 在基类Activity中配置 /** * Activity基类 */ protected Eve

  • Android实现EventBus登录界面与传值(粘性事件)

    本文实例为大家分享了Android实现EventBus登录界面与传值的具体代码,供大家参考,具体内容如下 展示效果 添加EventBus导入依赖 compile 'org.greenrobot:eventbus:3.0.0' 主MainActivity方法 public class MainActivity extends AppCompatActivity { private EditText username,password; private Button btn_go; private

  • Android EventBus 3.0.0 使用总结(必看篇)

    前言 EventBus框架 EventBus是一个通用的叫法,例如Google出品的Guava,Guava是一个庞大的库,EventBus只是它附带的一个小功能,因此实际项目中使用并不多.用的最多的是greenrobot/EventBus,这个库的优点是接口简洁,集成方便,但是限定了方法名,不支持注解.另一个库square/otto修改自 Guava ,用的人也不少.所以今天我们研究的目标是greenrobot的EventBus. EventBus 简介 1.EventBus3.0.0 是最新的

  • Android 拦截返回键事件的实例详解

    Android 拦截返回键事件的实例详解 KeyEvent类 Android.View.KeyEvent类中定义了一系列的常量和方法,用来描述Android中的 按键事件和返回键有关的常量和方法有. KeyEvent.KEYCODE_BACK: 表示key类型为返回键 KeyEvent.ACTION_DOWN:表示事件为按下key,如果一直按住不放,则会不停产生此事件. KeyEvent.ACTION_UP:表示事件为为放开key,一次点击key过程只会调用一次. public final in

  • Android ListView监听滑动事件的方法(详解)

    ListView的主要有两种滑动事件监听方法,OnTouchListener和OnScrollListener 1.OnTouchListener OnTouchListener方法来自View中的监听事件,可以在监听三个Action事件发生时通过MotionEvent的getX()方法或getY()方法获取到当前触摸的坐标值,来对用户的滑动方向进行判断,并可在不同的Action状态中做出相应的处理 mListView.setOnTouchListener(new View.OnTouchLis

  • Android实现连续点击多次事件的代码详解

    有时候我们需要实现这样的场景,类似进入开发者模式,即多次点击后执行操作. 首先我们先看一个方法: System提供的一个静态方法arraycopy(),我们可以使用它来实现数组之间的复制. public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length): src:源数组: srcPos:源数组要复制的起始位置: dest:目的数组: destPos:目的数组放置的起始位置: length

  • Android View的事件体系教程详解

    目录 一.什么是View?什么是ViewGroup? 二.View的位置 三.View的触摸事件 1.MotionEvent 2.TouchSlop 3.VelocityTracker 5.Scroller 四.View的滑动 1)使用Scroll 2)通过动画 3)使用延时策略 五.View的事件分发机制 六.View的滑动冲突问题 View的滑动冲突常见可以简单分为三种: 滑动冲突的处理规则 滑动冲突的解决方法 一.什么是View?什么是ViewGroup? View是Android中所有控

  • jQuery中的on与bind绑定事件区别实例详解

    on(events,[selector],[data],fn) events:一个或多个用空格分隔的事件类型和可选的命名空间,如"click"或"keydown.myPlugin" . selector:一个选择器字符串用于过滤器的触发事件的选择器元素的后代. data:当一个事件被触发时要传递event.data给事件处理函数. fn:该事件被触发时执行的函数. false 值也可以做一个函数的简写,返回false. bind(type,[data],fn) 为每

  • JS之if语句对接事件动作逻辑(详解)

    if 函数的实现步骤: function +名字() 指定id , 指定开关(display: none or block) if + else 构成逻辑 控制开关 决定在哪里安置一个灯泡, 指定一个id给某个标签 把开关用电线连着灯泡, 安装开关#+id名称{ 属性1= 赋值, 属性 2 = 赋值 , 属性3 = 赋值 } 所有的赋值都可以成为一个开关. 如果是一个手动版的, 这里已经完成了. 更改属性的赋值就可以变更id的样式 帮开关装上感应元件, 一旦有动静, 开关便自动switch 建立

  • 使用jQuery卸载全部事件的思路详解

    说到事件, jquery 做了不少,当然也有 data 的很多功劳,因为原生 js 不支持匿名卸载事件的,而她为了开发者好用支持了匿名的 匿名事件的思路 首先她会判断目标是否是元素或者对象,如果是元素,则在元素上打一个标识( expando )然后值是生成的一个 guid ,并在缓存对象下建立一个缓存,比如: $.cache={ '2': { data: {}, events: {}, handle: function(){} }, } 然后会在你触发元素事件时拿元素上的标识去往缓存里的 eve

  • JQuery在循环中绑定事件的问题详解

    有个页面上需要N个DOM,每个DOM里面的元素ID都要以数字结尾,比如说 <input type="text" name="username" id="username_1" value="" /> <input type="text" name="username" id="username_2" value="" />

  • 兼容浏览器的js事件绑定函数(详解)

    因为javascript中所有对象都集成与Object,那么只有给Object原型添加一个事件绑定函数,就不需要在处理绑定事件的时候,每次写一长串代码,直接调用即可.在代码中添加红色部分代码,直接便可以在代码中直接调用 <div id="mydiv" style="cursor:pointer; background-color:#F00">nihaoa</div> <script language="javascript&q

  • python模拟事件触发机制详解

    本文实例为大家分享了python模拟事件触发机制的具体代码,供大家参考,具体内容如下 EventManager.py # -*- encoding: UTF-8 -*- # 系统模块 from queue import Queue, Empty from threading import * class EventManager: def __init__(self): """初始化事件管理器""" # 事件对象列表 self.__eventQu

随机推荐