亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在多個活動中將LiveData替換為EventBus

在多個活動中將LiveData替換為EventBus

郎朗坤 2021-05-07 08:42:50
目前,我的項目使用EventBus發布事件,而我正在嘗試用EventBus替換LiveData。從理論上講,它們的工作方式相似。我一開始就毫不費力地遷移了。但這是我不知道如何處理的情況。這是場景。LaunchActivity-> PersonInfoActivity-> UpdateInfoActivity當前,我們使用EventBus在LaunchActivity和PersonInfoActivity中訂閱UserInfoEventLaunchActivity.javapublic class LaunchActivity{     @Subscribe(threadMode = ThreadMode.MAIN)     public void onEvent(UserInfoEvent event){     }}PersonInfoActivity.javapublic class PersonInfoActivity{     @Subscribe(threadMode = ThreadMode.MAIN)     public void onEvent(UserInfoEvent event){     }}UpdateInfoActivity.javapublic class UpdateInfoActivity{     public void onSubmit(){          EventBus.getDefault().post(new UserInfoEvent());     }}問題是,我想用LiveData代替這種情況我做了什么?我已經閱讀了有關livedata Room的單例用法的問題-更新數據庫時,LiveData觀察器不會觸發,我想嘗試使用相同的方式,但是沒有運氣。每當onChanged()我開始活動時,事件都會觸發
查看完整描述

3 回答

?
汪汪一只貓

TA貢獻1898條經驗 獲得超8個贊

您可以使用viewModel實現來實現。喜歡,


public class UserViewModel extends AndroidViewModel {

private UserRepository userRepository;

private LiveData<List<UserData>> getUser;


public UserViewModel(@NonNull Application application) {

    super(application);

    userRepository = new UserRepository(application);

    getUser= userRepository.getUser();

}



public LiveData<List<UserData>> getUser() {

    return getUser;

}

}

創建此類后,請更新您的PersonalInfoActivity和LaunchActivity,


private UserViewModel userViewModel;


    userViewModel.getUser().observe(this, new Observer<List<UserData>>() {

    @Override

public void onChanged(@Nullable final List<UserData> user) {

//write code to set data of user to show using list of user

}

});

如果您對此有任何疑問,請離開commnet。


查看完整回答
反對 回復 2021-05-19
?
RISEBY

TA貢獻1856條經驗 獲得超5個贊

我認為對LiveData有一些誤解。你可以在這里看看

它可能會對您有所幫助。此外,您還可以使用LiveData和LiveData事件總線來檢查此事件總線的實現。

希望能幫助到你!?。?/p>


查看完整回答
反對 回復 2021-05-19
?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

我在本教程中創建了一個名為LivedataBus的庫 。您可以像這樣使用它:


 //Subscribe

 LiveDataBus.subscribe("event_name", this, Observer {

        it.runAndConsume {

            Toast.makeText(this, "Hello ${it.value}", Toast.LENGTH_LONG).show()

        }

    })


 //Publish

 val obj = SomeEvent()

 LiveDataBus.publish("event_name", ConsumableEvent(value = obj))

神奇之處在于,我使用了ConsumableEvent,可以在觸發事件后使用它,以防止從靜態總線獲取最新數據。

我在當前項目中使用了它,并且在多個活動和片段上都可以很好地工作。該庫的好處是它可以在Livedata上運行,而您無需關心活動或片段生命周期。


查看完整回答
反對 回復 2021-05-19
  • 3 回答
  • 0 關注
  • 326 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號