android 监听多个 MutableLiveData 属性变化?

android 监听多个 MutableLiveData 属性变化?

视图代码如下:

<Button 
   // ...
    android:text="@{vm.getText()}"
/>

java代码如下:

class TestVM extends ViewModel {
    private final MutableLiveData<Boolean> isRequest = new MutableLiveData<>();
    private final MutableLiveData<Integer> total = new MutableLiveData<>();

    public TestVM() {
        this.isReqeust.setValue(false);
         this.total.setValue(10);
    }

    public String getText() {
        if (this.isRequest.getValue()) {
            return "请求中";
        }
        int total = this.total.getValue();
        if (total >= 1000) {
            return '999+';
        }
        return String.valueOf(total);
    }
}

上述代码在 isRequesttotal 变化的时候,界面上显示的文本不更新,请问该怎么解决?

阅读 3.3k
1 个回答

用 MediatorLiveData:

class TestVM extends ViewModel {
    private final MutableLiveData<Boolean> isRequest = new MutableLiveData<>();
    private final MutableLiveData<Integer> total = new MutableLiveData<>();
    public final MediatorLiveData<String> text = new MediatorLiveData<>();

    public TestVM() {
        this.isRequest.setValue(false);
        this.total.setValue(10);

        text.addSource(isRequest, value -> text.setValue(getText()));
        text.addSource(total, value -> text.setValue(getText()));
    }

    private String getText() {
        if (this.isRequest.getValue()) {
            return "请求中";
        }
        int total = this.total.getValue();
        if (total >= 1000) {
            return "999+";
        }
        return String.valueOf(total);
    }
}

或者

TestVM viewModel = new ViewModelProvider(this).get(TestVM.class);

viewModel.isRequest.observe(this, new Observer<Boolean>() {
    @Override
    public void onChanged(Boolean isRequest) {
        updateButtonText();
    }
});

viewModel.total.observe(this, new Observer<Integer>() {
    @Override
    public void onChanged(Integer total) {
        updateButtonText();
    }
});

private void updateButtonText() {
    String text = viewModel.getText();
    myButton.setText(text); // 假设myButton是你的Button对象
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题