1,viewMode 是view和model的的中間層,有生命週期,並且即使切換屏幕也不用destroy
2,liveData是用於存儲viewModel數據的抽象類,他的子類是MutableLiveData,, 一般兩者結合使用,
2,dataBinding 是把viewModel和ui結合的google推出的官方框架
eg:
build.gradle
dataBinding{
enabled = true
}
public class UserActivity extends Activity {
{@literal @}Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.user_activity_layout);
final UserModel viewModel = ViewModelProviders.of(this).get(UserModel.class);
viewModel.userLiveData.observer(this, new Observer<User>() {
{@literal @}Override
public void onChanged(@Nullable User data) {
// update ui.
}
});
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
{@literal @}Override
public void onClick(View v) {
viewModel.doAction();
}
});
}
}
public class UserModel extends ViewModel {
private final MutableLiveData<User> userLiveData = new MutableLiveData<>();
public LiveData<User> getUser() {
return userLiveData;
}
public UserModel() {
// trigger user load.
}
void doAction() {
// depending on the action, do necessary business logic calls and update the
// userLiveData.
}
}
public class MyFragment extends Fragment {
public void onStart() {
UserModel userModel = ViewModelProviders.of(getActivity()).get(UserModel.class);
}
}
<layout>
<data>
<variable
name="userModel"
type="com.xxxx.xxx.userModel"
/>
</data>
<viewGroup>
<TextView>
android:text="@{userModel.userLiveData}" // 單向數據
</TextView>
<EditText>
android:text="@={userModel.userLiveData}" // 雙向數據
</EditText>
<Button>
android:onClick="@{()->userModel.userModel()}" // 點擊事件
</Button>
</viewGroup>
<layout>