1 回答

TA贡献1831条经验 获得超9个赞
问题
如何将所有 if/else 条件从 View 移至 ViewModel?
建议您删除View中的所有业务逻辑。
View只有用于更新 UI 的代码,该代码耦合了ViewModel数据(LiveData),可以通过
ViewDataBininding
库来减少。最后,View只有与 setup
ViewDataBinding
和ViewModel
.
视图模型
public class LoginViewModel extends AndroidViewModel {
...
private MutableLiveData<String> _email = new MutableLiveData<>(); // is binded some UI such as EditText..
LiveData<Boolean> emailValidate = Transformations.map(_email, this::emailValidate);
private boolean emailValidate(String email) {
return true; // implements email validation logic
}
...
}
看法
...
@Override
public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
LoginViewModel loginViewModel= ViewModelProviders.of(this).get(LoginViewModel.class);
subscribe(loginViewModel);
}
private void subscribe(LoginViewModel loginViewModel) {
loginViewModel.emailValidate.observe(this, this::setEmailValidateLayout);
// You shouldn't implement observing in the onClick event. Overlapping observers problem.
}
private void setEmailValidateLayout(boolean validate) {
progressBar.setVisibility(validate ? View.VISIBLE : View.INVISIBLE);
btnNumber.setEnabled(validate);
}
...
添加回答
举报