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);
}
...
添加回答
舉報