zoukankan      html  css  js  c++  java
  • EventBus 3.0使用

    在没用eventBus之前一直用Android广播方式通知消息更新UI

    广播写法

    首先发送广播通知

    Intent intent = new Intent();
    intent.setAction("action.refreshFriend"); //名称自定义标识是哪个通知消息
    sendBroadcast(intent);

    接收广播通知

    首先注册广播

    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction("action.refreshFriend");
    registerReceiver(mRefreshBroadcastReceiver, intentFilter);

    private BroadcastReceiver mRefreshBroadcastReceiver = new BroadcastReceiver() { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
    String action = intent.getAction(); 
    if (action.equals("action.refreshFriend")) 

      //更新UI


    };

    protected void onDestroy() {
    super.onDestroy();
    unregisterReceiver(mRefreshBroadcastReceiver); //销毁广播
    }

    ----------------------------------------------------------------

    https://github.com/greenrobot/EventBus

    EventBus是Android的发布/订阅事件总线优化。

    首先添加引用 

     compile 'org.greenrobot:eventbus:3.0.0'

    MainActivity代码
    package com.freexiaoyu.enevtbus;
    
    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    
    import org.greenrobot.eventbus.EventBus;
    import org.greenrobot.eventbus.Subscribe;
    import org.greenrobot.eventbus.ThreadMode;
    
    import butterknife.BindView;
    import butterknife.ButterKnife;
    import butterknife.OnClick;
    
    public class MainActivity extends AppCompatActivity {
        @BindView(R.id.tv_test)
        TextView tv_text;
        @BindView(R.id.btn_post)
        Button btn_post;
        @BindView(R.id.btn_post2)
        Button btn_post2;
        @BindView(R.id.btn_post3)
        Button btn_post3;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            ButterKnife.bind(this);
            EventBus.getDefault().register(this);
        }
    
        @Subscribe(threadMode = ThreadMode.MAIN)
        public void helloEventBus(Event event) {
            switch (event.getType()){
                case 1:
                    tv_text.setText(event.getMessage().toString());
                    break;
                case 2:
                    tv_text.setText(event.getMessage().toString());
                    break;
                case 3:
                    tv_text.setText(event.getMessage().toString());
                    break;
            }
    
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            EventBus.getDefault().unregister(this);
        }
    
        @OnClick({R.id.btn_post,R.id.btn_post2,R.id.btn_post3})
        public void submit(View view) {
            switch (view.getId()){
                case R.id.btn_post:
                    EventBus.getDefault().post(new Event(1,"我是老大"));
                    break;
                case R.id.btn_post2:
                    EventBus.getDefault().post(new Event(2,"我是老二"));
                    break;
                case R.id.btn_post3:
                    Intent intent=new Intent(MainActivity.this,TestActivity.class);
                    startActivity(intent);
                    break;
            }
        }
    }
    View Code
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent" android:orientation="vertical">
    
        <TextView
            android:id="@id/tv_test"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello World!" />
    
        <Button
            android:id="@id/btn_post"
            android:layout_width="match_parent"
            android:layout_height="52.0dp"
            android:text="EventBus" />
        <Button
    
            android:id="@id/btn_post2"
            android:layout_width="match_parent"
            android:layout_height="52.0dp"
            android:text="EventBus" />
        <Button
    
            android:id="@id/btn_post3"
            android:layout_width="match_parent"
            android:layout_height="52.0dp"
            android:text="跳转界面" />
    </LinearLayout>
    View Code

    TestActivity代码

    package com.freexiaoyu.enevtbus;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    
    import org.greenrobot.eventbus.EventBus;
    
    import butterknife.BindView;
    import butterknife.ButterKnife;
    import butterknife.OnClick;
    
    public class TestActivity extends AppCompatActivity {
        @BindView(R.id.btn_post)
        Button btn_post;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_test);
            ButterKnife.bind(this);
        }
    
        @OnClick({R.id.btn_post})
        public void submit(View view) {
            switch (view.getId()){
                case R.id.btn_post:
                    EventBus.getDefault().post(new Event(3,"我是小三哈哈!"));
                    break;
            }
        }
    
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
        }
    }
    View Code
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <Button
            android:id="@id/btn_post"
            android:layout_width="match_parent"
            android:layout_height="52.0dp"
            android:text="我要更新上一页内容" />
    </RelativeLayout>
    View Code

    Event代码

    public class Event {
        private int type;
        private Object message;
    
        public Event(int type, Object message){
            this.type=type;
            this.message=message;
        }
    
        public int getType() {
            return type;
        }
    
        public void setType(int type) {
            this.type = type;
        }
    
        public Object getMessage() {
            return message;
        }
        public void setMessage(Object message) {
            this.message = message;
        }
    }
    

      

     DEMO地址 https://yunpan.cn/cB3SH2Ig7dAZU  访问密码 aad8

  • 相关阅读:
    HTML常用标签及其属性
    初识Java
    JS中firstChild,lastChild,nodeValue属性
    前端网页进度Loading
    Git分支管理小结
    Vim文本编辑命令
    EF
    Linq
    委托(作用:解耦),lambda的演化
    单例模式
  • 原文地址:https://www.cnblogs.com/freexiaoyu/p/5650605.html
Copyright © 2011-2022 走看看