解決EventBus中接收方法中無法更新UI的問題
from :
http://www.th7.cn/Program/Android/201704/1153607.shtml
問題
比如介面MainActivity向介面SecondActivity傳送訊息時,介面S呼叫接收方法,可以接收介面M傳送的訊息,輸出臺log可以列印出訊息內容,但是無法更新UI。
MainActivity
Button eventBus= (Button) findViewById(R.id.eventbus);
RxView.clicks(eventBus)
.throttleFirst(1,TimeUnit.SECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Object>() {
@Override
public void accept(@NonNull Object o) throws Exception {
EventBus.getDefault().postSticky(new MessageEvent("MainActivity:this is Sticky"));
startActivity(SecondActivity.class);
}
});'
SecondActivity
@Override
@org.greenrobot.eventbus.Subscribe
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
UtilsLog.i("主執行緒Id="+Thread.currentThread().getId()+",主執行緒名字="+Thread.currentThread().getName());
setContentView(R.layout.activity_second);
EventBus.getDefault().register(this);
initView();
}
private void initView() {
show= (TextView) findViewById(R.id.result);
show.setText("沉夢昂志");
}
@org.greenrobot.eventbus.Subscribe(sticky=true,threadMode = org.greenrobot.eventbus.ThreadMode.MAIN)
public void receiveMainActivity(MessageEvent event){
String result=event.getMessage();
show.setText(result);
}
分析問題
如果不仔細看程式碼的話,這樣寫的話感覺沒問題。但是會出現一個問題,就是介面S的TextView一直不會更新,不會顯示介面M傳送的訊息內容。其實問題就是在介面S,訂閱訊息事件的程式碼寫錯位置了,EventBus.getDefault().register(this);這句程式碼放在initView()之前,造成的結果就是介面的控制元件還未初始化,就接收訊息了,介面無法更新UI,也就是TextView還未初始化。
解決問題
只需要把EventBus.getDefault().register(this)放在最後就行了。
@Override
@org.greenrobot.eventbus.Subscribe
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
initView();
EventBus.getDefault().register(this);
}
相關文章
- goland中npm無法使用的問題及解決方法GoLandNPM
- IDEA中Lombok無法生效的問題及解決方法IdeaLombok
- 解決:angular js模板中無法使用ueditor的問題AngularJS
- post傳引數,但是後端無法接收問題解決後端
- 解決idea中無法識別主類的問題Idea
- 【Tip】解決like中無法匹配下劃線的問題
- Oracle 解決like中無法匹配下劃線的問題Oracle
- ajax資料無法更新問題原因及解決
- Asp.Net中Response.Cookies.Remove 無法刪除COOKIE的問題解決方法ASP.NETCookieREM
- 解決修改element-ui樣式無法生效問題UI
- 救命!!!jenkins 中自動化測試中遇到無法解決的問題Jenkins
- AD9中元件無法顯示的問題解決元件
- Mac雙系統中Windows無法使用蘋果滑鼠鍵盤等問題的解決方法MacWindows蘋果
- 解決無法使用VI的問題
- Win10系統中間諜軟體防護無法更新的解決方法Win10
- ArcEngine開發中Label無法顯示小數點前0的問題解決方法
- java中亂碼問題解決方法Java
- 老問題:Android子執行緒中更新UI的3種方法Android執行緒UI
- jive中MySQL中文問題解決一法MySql
- Vue 專案裡戳中你痛點的問題及解決辦法(更新)Vue
- Ubuntu18.04中解決emacs無法輸入中文的問題UbuntuMac
- 批量更新時無法觸發事件的解決方法事件
- JS中toFixed()方法的問題及解決方案JS
- bugzilla更新出現perl模組無法安裝問題解決辦法
- JSP中無法使用內建物件解決方法JS物件
- 解決Centos無法yum源的問題CentOS
- dataguard中MRP無法啟動的問題分析和解決
- AI換臉:FaceFusion 3.5.0更新,解決老版本無法使用問題!AI
- gmail無法訪問問題解決--FGWAI
- HTML中<a>標籤無法使用垂直邊距的解決方法HTML
- 解決drf_yasg中的SwaggerAPI無法正確分組問題SwaggerAPI
- SpringBoot 2.0中SpringWebContext 找不到無法使用的問題解決Spring BootWebContext
- 解決寶塔皮膚無法訪問的問題?
- Android中ImageView無法居中的問題AndroidView
- 解決ASM無法啟動問題ASM
- SaaS無法解決“關鍵”問題
- windows10系統下flash更新灰色無法更新的解決方法Windows
- win10系統中“msdn我告訴你”無法訪問的解決方法Win10