zoukankan      html  css  js  c++  java
  • 【第一篇】学习 android 事件总线androidEventbus之sticky事件的传递

    最近再看eventbus相关代码,首先从使用开始,后期再从源码角度分析eventbus.使用Demo后期公布到github上去。
    使用的框架地址:https://github.com/bboyfeiyu/AndroidEventBus

    Sticky 事件 使用例子:

    1,首先每个Activity或者fragement都要进行eventBus的注册和反注册。
    发送sticky事件的activity:
    1.  1 package com.example.mysimpleeventbus;
       2 import org.simple.eventbus.EventBus;
       3 import android.content.Intent;
       4 import android.os.Bundle;
       5 import android.support.v7.app.ActionBarActivity;
       6 import android.view.View;
       7 import android.view.View.OnClickListener;
       8 import android.widget.Button;
       9 public class MainActivity extends ActionBarActivity {
      10     
      11     private Button button;
      12     @Override
      13     protected void onCreate(Bundle savedInstanceState) {
      14         super.onCreate(savedInstanceState);
      15         setContentView(R.layout.activity_main);
      16         button = (Button)findViewById(R.id.button);
      17         // 1 首先注册事件总线
      18         EventBus.getDefault().register(this);
      19         button.setOnClickListener(new OnClickListener() {
      20             
      21             @Override
      22             public void onClick(View arg0) {
      23                 // 2 发送Sticky事件
      24                 EventBus.getDefault().postSticky(
      25                         new User("soyoungboy", "西安财经学院"));
      26                 
      27                 // 跳转页面
      28                 Intent intent = new Intent(MainActivity.this, OtherActivity.class);
      29                 startActivity(intent);
      30             }
      31         });
      32     }
      33     @Override
      34     protected void onDestroy() {
      35         super.onDestroy();
      36         EventBus.getDefault().unregister(this);
      37     }
      38 }

     
    接收事件的类:
    注意这里的注册不是register就行了,而是:EventBus.getDefault().registerSticky(this);
     1 package com.example.mysimpleeventbus;
     2 import org.simple.eventbus.EventBus;
     3 import org.simple.eventbus.Subscriber;
     4 import android.app.Activity;
     5 import android.os.Bundle;
     6 import android.widget.Toast;
     7 public class OtherActivity extends Activity {
     8     @Override
     9     protected void onCreate(Bundle savedInstanceState) {
    10         // TODO Auto-generated method stub
    11         super.onCreate(savedInstanceState);
    12         setContentView(R.layout.activity_main);
    13         //注意此处的registerSticky而不是register
    14         EventBus.getDefault().registerSticky(this);
    15     }
    16     //此处获取发送事件的内容
    17     @Subscriber
    18     void showToast(User user) {
    19         Toast.makeText(OtherActivity.this, user.toString(), Toast.LENGTH_LONG).show();
    20     }
    21     @Override
    22     protected void onDestroy() {
    23         super.onDestroy();
    24         //同样需要unregister
    25         EventBus.getDefault().unregister(this);
    26     }
    27 }
    然后配置文件:
    1.  1 <?xml version="1.0" encoding="utf-8"?>
       2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
       3     package="com.example.mysimpleeventbus"
       4     android:versionCode="1"
       5     android:versionName="1.0" >
       6     <uses-sdk
       7         android:minSdkVersion="8"
       8         android:targetSdkVersion="20" />
       9     <application
      10         android:allowBackup="true"
      11         android:icon="@drawable/ic_launcher"
      12         android:label="@string/app_name"
      13         android:theme="@style/AppTheme" >
      14         <activity
      15             android:name=".MainActivity"
      16             android:label="@string/app_name" >
      17             <intent-filter>
      18                 <action android:name="android.intent.action.MAIN" />
      19                 <category android:name="android.intent.category.LAUNCHER" />
      20             </intent-filter>
      21         </activity>
      22         <activity android:name=".OtherActivity" >
      23         </activity>
      24     </application>
      25 </manifest>

    如果MainActivity发送事件总线时,设置Tag的话,OtherActivity@Subscriber 注解没有添加tag的话,就不会获取到数据,除非设置tag
    设置tag代码如下:
    1.  1 EventBus.getDefault().postSticky( 2 new User("soyoungboy", "西安财经学院"),"soyoungboy");  
    则对应的OtherActivity中接收的改为:
    1. //此处获取发送事件的内容
    2. 1 //此处获取发送事件的内容
      2     @Subscriber(tag = "soyoungboy")
      3     void showToast(User user) {
      4         Toast.makeText(OtherActivity.this, user.toString(), Toast.LENGTH_LONG).show();
      5     }
    框架对应Demo中有这样一句话:
    不同组件 (Activity、Fragment、Service等)、不同线程之间都可以通过事件总线来发布事件,它是线程安全的。
     * 只要发布的事件的参数类型和tag都匹配即可接收到事件.  
     
  • 相关阅读:
    sqlserver 中的 substring函数(转)
    C#二个相减怎么获得天数,就是比如201225 与201231之间相差的天数
    C++文件添加到项目中
    VS2008动态链接库(DLL)的创建与导入
    美剧字幕绿箭侠第1季第7集
    C++中#define用法
    C++头文件的重复引用
    visual studio中解决方案是什么
    NewWords/300400
    指针
  • 原文地址:https://www.cnblogs.com/androidsuperman/p/4630996.html
Copyright © 2011-2022 走看看