EventBus入門(mén)(二)

作者:某人_Valar
如需轉(zhuǎn)載請(qǐng)保留原文鏈接
EventBus的GitHub地址:https://github.com/greenrobot/EventBus
本文會(huì)把包括兩個(gè)EventBus的案例涡相,來(lái)簡(jiǎn)單實(shí)現(xiàn)EventBus的使用。

相關(guān)文章

本文結(jié)構(gòu)

  • 1.EventBus的使用
  • 2.粘性(sticky)EventBus的使用

兩者的區(qū)別剩蟀,普通的EventBus使用都是需要先注冊(cè)(register)催蝗,再發(fā)送消息(POST),才能接收到數(shù)據(jù)。
如果使用postSticky發(fā)送喻旷,就先接受到數(shù)據(jù)生逸,之后在進(jìn)行注冊(cè)時(shí),數(shù)據(jù)就隨之展現(xiàn)出來(lái)且预。

1.EventBus的使用

1.1 引用包
compile 'org.greenrobot:eventbus:3.0.0'
1.2 準(zhǔn)備

新建了一個(gè)EventBusActivity當(dāng)做發(fā)送數(shù)據(jù)界面槽袄,新建一個(gè)ResultActivity用于呈現(xiàn)結(jié)果,在activity_main.xml中添加一個(gè)按鈕锋谐,

<Button
        android:id="@+id/bt_eventBus"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="點(diǎn)擊進(jìn)入EventBus測(cè)試"
        />

并在MainActivity中添加一個(gè)點(diǎn)擊事件跳轉(zhuǎn)到EventBusActivity遍尺。

Button mButton = (Button) findViewById(R.id.bt_eventBus);
        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this,EventBusActivity.class);
                startActivity(intent);
            }
        });
1.3 注冊(cè)與解注冊(cè)

在EventBusActivity的onCreate()方法中注冊(cè)

EventBus.getDefault().register(EventBusActivity.this);

重寫(xiě)EventBusActivity的onDestroy()方法進(jìn)行解注冊(cè)

@Override
    protected void onDestroy() {
        super.onDestroy();
        //3.3 解注冊(cè)
        EventBus.getDefault().unregister(EventBusActivity.this);
    }
1.4 創(chuàng)建發(fā)送消息類

新建一個(gè)MyMessage類如下

public class MyMessage {

    public String name;

    public MyMessage(String name){
        this.name = name;
    }
}
1.5 發(fā)送消息

可自己添加一個(gè)按鈕,點(diǎn)擊即發(fā)送

mbutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                EventBus.getDefault().post(new MyMessage("主線程發(fā)送的數(shù)據(jù)-001"));
                
                //發(fā)送之后跳轉(zhuǎn)到ResultActivity界面查看結(jié)果
                Intent intent = new Intent(EventBusActivity.class,ResultActivity.class);
                startActivity(intent);

            }
}
1.6 接收消息

為ResultActivity添加一個(gè)TextView用于展示接收到的數(shù)據(jù)涮拗。

@Subscribe(threadMode = ThreadMode.MAIN)  //用注解的方式設(shè)定接收方式
    public void ReceiveMessage(MyMessage myMessage){
        //顯示接收的消息
        mTextView.setText(myMessage.name);
    }

這樣我們第一個(gè)EventBus案例就實(shí)現(xiàn)了乾戏。

2.粘性EventBus的使用

2.1-2.2 參考本文1.1與1.2
2.3 創(chuàng)建發(fā)送消息類(與1.4相同)
public class MyMessage {
    public String name;
    public MyMessage(String name){
        this.name = name;
    }
}
2.4 發(fā)送消息

這里所使用的就是 EventBus.getDefault().postSticky()方法

mbt_eventBus_sticky.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //發(fā)送消息
                EventBus.getDefault().postSticky(new StickyMessage("這里是粘性事件發(fā)送的數(shù)據(jù)-002"));

                //跳轉(zhuǎn)到接收消息的頁(yè)面
                Intent intent = new Intent(EventBusActivity.this,ResultActivity.class);
                startActivity(intent);
            }
        });
2.5 接收消息

在確定接收方式之后,需要加上sticky = true

@Subscribe(threadMode = ThreadMode.MAIN,sticky = true)
    public void ReceiveSticky(StickyMessage stickyMessage){
        mTextView.setText(stickyMessage.msg);  //這時(shí)雖然已經(jīng)為T(mén)extView賦值三热,但是暫時(shí)不會(huì)顯示出來(lái)鼓择。
    }
2.6 注冊(cè)

在ResultActivity設(shè)置一個(gè)按鈕,點(diǎn)擊即注冊(cè)EventBus
這里要注意添加一個(gè)判斷條件就漾,如果EventBus被注冊(cè)多次會(huì)出現(xiàn)異常呐能。

mbt_receiveSticky.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (isFirst){
                    // 注冊(cè)
                    EventBus.getDefault().register(ResultActivity.this);
                    isFirst = false;
                }else {
                    Toast.makeText(ResultActivity.this,"你已經(jīng)注冊(cè)過(guò)了EventBus",
                            Toast.LENGTH_SHORT).show();
                }
            }
        });
2.7解注冊(cè)

重寫(xiě)ResultActivity的onCreate()方法

@Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().removeAllStickyEvents(); //移除所有的粘性事件
        EventBus.getDefault().unregister(ResultActivity.this);
    }

到此粘性EventBus的案例也就結(jié)束了。

相關(guān)文章

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市摆出,隨后出現(xiàn)的幾起案子朗徊,更是在濱河造成了極大的恐慌,老刑警劉巖偎漫,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件爷恳,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡象踊,警方通過(guò)查閱死者的電腦和手機(jī)温亲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)通危,“玉大人铸豁,你說(shuō)我怎么就攤上這事灌曙【盏” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵在刺,是天一觀的道長(zhǎng)逆害。 經(jīng)常有香客問(wèn)我,道長(zhǎng)蚣驼,這世上最難降的妖魔是什么魄幕? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮颖杏,結(jié)果婚禮上纯陨,老公的妹妹穿的比我還像新娘。我一直安慰自己留储,他們只是感情好翼抠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著获讳,像睡著了一般阴颖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上丐膝,一...
    開(kāi)封第一講書(shū)人閱讀 51,462評(píng)論 1 302
  • 那天量愧,我揣著相機(jī)與錄音,去河邊找鬼帅矗。 笑死偎肃,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的浑此。 我是一名探鬼主播累颂,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼尤勋!你這毒婦竟也來(lái)了喘落?” 一聲冷哼從身側(cè)響起茵宪,我...
    開(kāi)封第一講書(shū)人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瘦棋,沒(méi)想到半個(gè)月后稀火,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赌朋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年凰狞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沛慢。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡赡若,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出团甲,到底是詐尸還是另有隱情逾冬,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布躺苦,位于F島的核電站身腻,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏匹厘。R本人自食惡果不足惜嘀趟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望愈诚。 院中可真熱鬧她按,春花似錦、人聲如沸炕柔。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)汗唱。三九已至宫莱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哩罪,已是汗流浹背授霸。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留际插,地道東北人碘耳。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像框弛,于是被迫代替她去往敵國(guó)和親辛辨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容