天天看點

優雅地使用rxbus

//響應事件源,多tag
@Subscribe(thread = EventThread.MAIN_THREAD, 
        tags = {@Tag(RxBusAction.MAIN_HOME_REFRESH),
                @Tag(RxBusAction.ON_APP_LOGOUT)})
public void loadHomeModule(RxBusMsg<HomeModule> event) {
    Clog.e("loadHomeModule ");


}
//響應事件源,單tag
@Subscribe(thread = EventThread.MAIN_THREAD, tag=RxBusAction.ON_APP_LOGIN)
public void refresh(RxBusMsg<HomeModule> event) {
    Clog.e("refresh");


}
//post msg,根據 Action:ON_APP_LOGOUT可以直接查找訂閱者,提供了兩中響應的緯度
//1.action 2.class
RxBus.post(RxBusAction.ON_APP_LOGOUT, new RxBusMsg<HomeModule>(null));


/**
 * 定義event action的常量
 *
 * @author GanQuan
 * @since 2018/3/15.
 */
// msg constants
public interface RxBusAction {
    String MAIN_HOME_REFRESH = "main_home_refresh";
    String ON_APP_LOGOUT = "on_app_logout";
    String ON_APP_LOGIN = "on_app_login";

}


/**
 * event消息體
 *
 * @author GanQuan
 * @since 2018/3/15.
 */

public class RxBusMsg<T> implements Serializable {
    public String tag;
    public T value;

    /**
     * @param value 當value為空時必須傳入泛型的類型
     */
    public RxBusMsg(@NonNull T value) {
        this.value = value;
    }

    public RxBusMsg<String> obtainMsg(String msg) {
        return new RxBusMsg<>(msg);
    }
}