編輯:關於android開發
Android中Activity、Service、Fragment之間的相互通信比較麻煩,主要有以下一些方法:
(1)使用廣播,發送者發出廣播,接收者接收廣播後進行處理;
(2)使用Handler和Message,如下載線程完成下載任務後,給UI發送Message,UI收到Message後更新界面。
但是這些方法都比較繁瑣,一種比較簡單有效的方法就是使用事件總線。事件總線的基本原理是發送者把消息發送到事件總線,然後事件總線在接收者中查找哪些方法注冊了這個事件,如果某個方法注冊了這個事件,就觸發該方法。這樣實現組件之間的通信要比其他方法簡單得多,代碼也更加簡潔。
1.下載simple_eventbus.jar,並導入Android工程,並且在需要發送或接收消息的組件裡面import下面兩個類:
import org.simple.eventbus.EventBus; import org.simple.eventbus.Subcriber;
2.新建兩個Activity:MainActivity和Activity2。其中MainActivity作為消息的接收者,Activity2作為消息的發送者。由於這兩個Activity都要使用事件總線,在onCreate(Bundle savedInstanceState)中需要注冊EventBus:
EventBus.getDefault().register(this);
在onDestroy()中需要注銷EventBus:
EventBus.getDefault().unregister(this);
3.在Activity2中新建一個Button,onClick()方法如下:
@Override public void onClick(View v) { switch (v.getId()){ case R.id.btnRun2: num++; txtStatus.setText("點擊了" + num + "次!"); EventBus.getDefault().post(new Object(), "my_tag"); break; default: break; } }
每點擊一次Button,就使用EventBus.getDefault().post()方法向EventBus發送一次消息。EventBus.getDefault().post()有兩個參數:第一個參數是向事件接收者傳遞的對象,由於我們這裡不需要向發送者傳遞對象,所以只new了一個Object;第二個參數是tag,相當於廣播裡面的action,只有接收者裡面注冊了這個tag的方法才會被觸發,沒有注冊這個tag的方法就不會被觸發。
4.在MainActivity中新建接收消息的方法:
@Subcriber(tag = "my_tag") private void updateUI(Object o){ num++; txtStatus.setText("Activity 2 點擊了" + num + "次!"); Log.e("num=", String.valueOf(num)); }
其中@Subcriber(tag = "my_tag")注解表明該方法是一個消息接收方法,tag = "my_tag"表明該方法注冊了"my_tag"這個消息,接收到該消息該方法就會被觸發。
5.運行結果。進入Activity 2,6次點擊Button:
再回到MainActivity,可以看到updateUI()被觸發,顯示出了Activity 2的點擊次數:
[Android] Activity間切換,傳遞數據,androidactivity前面照著android系統的裁剪圖片的功能自己寫了一個相似的工具。功能是大體上實現了,
Android,android官網 設置標題欄背景 1> 准備背景圖片: background_pix.png 注:用背景圖片比用顏色好處,可以讓背景
安卓客戶端a標簽長按彈框提示解決辦法,安卓標簽昨天工作時候發現一個bug,是關於a標簽的,在安卓客戶端中,如果是a標簽的話,長按會出現一個彈框,如圖所示 是因為安卓客戶端
下拉刷新原理。,下拉刷新原理 1 package com.lixu.listviewrefresh; 2 3 import java.util.ArrayList;