我想在我的项目 Android体系结构组件(AAC)中使用。 很好。
这是我的活动:
import androidx.appcompat.app.AppCompatActivity;
public class TradersActivity extends AppCompatActivity {
private TradersViewModel tradersViewModel;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tradersViewModel = ViewModelProviders.of(this).get(TradersViewModel.class);
tradersViewModel.getIsEnableSwipeProgress().observe(this, new Observer<Boolean>() {
@Override
public void onChanged(Boolean isEnable) {
// do some work with UI
}
});
}
// button click
public void onClickViewJson(Trader trader) {
tradersViewModel.doClickJsonView(trader);
}
}
这是我的ViewModel
public class TradersViewModel extends ViewModel {
private MutableLiveData<Boolean> isEnableSwipeProgress = new MutableLiveData<>();
public void doClickJsonView(Trader trader) {
// DO_SOME_COMPLEX_BUSINESS_LOGIC
}
public MutableLiveData<Boolean> getIsEnableSwipeProgress() {
return isEnableSwipeProgress;
}
}
在屏幕上,我有按钮。然后,当单击此按钮时,我将调用活动的方法-onClickViewJson(Trader trader)
。
此方法调用tradersViewModel.doClickJsonView(trader);
在viewModel
中,此方法执行一些复杂的业务逻辑。
方法完成后,我需要将结果( json )返回到我的活动。
我该怎么做?
答案 0 :(得分:1)
请记住,在MVVM中,ViewModel不了解您的视图。 您的ViewModel应该公开变量,以便您的视图可以观察并对其进行反应。
private MutableLiveData<Boolean> isEnableSwipeProgress = new MutableLiveData<>();
private MutableLiveData<JSONDto> jsonLiveData = new MutableLiveData<>();
public void doClickJsonView(Trader trader) {
// DO_SOME_COMPLEX_BUSINESS_LOGIC
jsonLiveData.postValue(/* the json you obtain after your logic finish */ )
}
public MutableLiveData<Boolean> getIsEnableSwipeProgress() {
return isEnableSwipeProgress;
}
public LiveData<JSONDto> getJsonDto() {
return this.jsonLiveData;
}
在您看来,您对jsonDto
的更改有反应:
tradersViewModel.getJsonDto().observe(this, new Observer<JSONDto>() {
@Override
public void onChanged(JSONDto json) {
if (json != null) {
// Do what you need here.
}
}
});