为什么我们需要 LiveData 和 ViewModel
Why do we need LiveData and ViewModel
我用过LiveData and ViewModel
例子
但是我不明白这个功能的使用,因为我可以直接更改值而不使用这个功能,即使这是通过使用观察代码在代码中增加的行数以及通过创建 MutableLiveData
.[= 与 ViewModel
中相同16=]
下面ViewModel
代码
public class FirstViewModel 扩展了 ViewModel {
// Create a LiveData with a String
public MutableLiveData<String> mCurrentName;
public MutableLiveData<String> getCurrentName() {
if (mCurrentName == null) {
mCurrentName = new MutableLiveData<String>();
}
return mCurrentName;
}
}
在Activity
中使用
public class MainActivity extends AppCompatActivity {
private FirstViewModel mModel;
ActivityMainBinding mBinding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBinding=DataBindingUtil.setContentView(this,R.layout.activity_main);
// Get the ViewModel.
mModel= ViewModelProviders.of(this).get(FirstViewModel.class);
// Create the observer which updates the UI.
final Observer<String> nameObserver = new Observer<String>() {
@Override
public void onChanged(@Nullable final String newName) {
// Update the UI, in this case, a TextView.
mBinding.mNameTextView.setText(newName);
}
};
// Observe the LiveData, passing in this activity as the LifecycleOwner and the observer.
mModel.getCurrentName().observe(this, nameObserver);
mBinding.btnSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String anotherName = mBinding.etField.getText().toString();
mModel.getCurrentName().setValue(anotherName);
}
});
}
}
您可以阅读 here 中的实时数据。就像 Observer
寻找数据的变化并通知 observers observable 对象已经改变
简而言之,当我们深入了解 activity/fragment 生命周期处理、显示更新数据以及更重要的是将表示层与业务逻辑分离并创建更好的结构化应用请从 here
中找到更多详细信息
ViewModel
和 LiveData
android 架构组件一起帮助创建生命周期感知 应用程序。
ViewModel:
ViewModel 类 通常用于将视图逻辑(存在于 Activity 类 中)与包含在 ViewModel 类 中的业务逻辑显着隔离。这种隔离是一种很好的架构设计,在维护大型项目时变得非常重要。
实时数据:
LiveData 有助于以生命周期感知方式实施 Observer Observable pattern。
在您的情况下,这似乎微不足道,因为您只是为 TextView
设置值。然而,请考虑常见的场景,例如点击 api 来检索数据等。在这种情况下,ViewModel
负责提供要在 Activity
中显示的数据,当完成LiveData
的帮助可以通过轻松确保生命周期意识来帮助避免崩溃。
我用过LiveData and ViewModel
例子
但是我不明白这个功能的使用,因为我可以直接更改值而不使用这个功能,即使这是通过使用观察代码在代码中增加的行数以及通过创建 MutableLiveData
.[= 与 ViewModel
中相同16=]
下面ViewModel
代码
public class FirstViewModel 扩展了 ViewModel {
// Create a LiveData with a String
public MutableLiveData<String> mCurrentName;
public MutableLiveData<String> getCurrentName() {
if (mCurrentName == null) {
mCurrentName = new MutableLiveData<String>();
}
return mCurrentName;
}
}
在Activity
中使用public class MainActivity extends AppCompatActivity {
private FirstViewModel mModel;
ActivityMainBinding mBinding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBinding=DataBindingUtil.setContentView(this,R.layout.activity_main);
// Get the ViewModel.
mModel= ViewModelProviders.of(this).get(FirstViewModel.class);
// Create the observer which updates the UI.
final Observer<String> nameObserver = new Observer<String>() {
@Override
public void onChanged(@Nullable final String newName) {
// Update the UI, in this case, a TextView.
mBinding.mNameTextView.setText(newName);
}
};
// Observe the LiveData, passing in this activity as the LifecycleOwner and the observer.
mModel.getCurrentName().observe(this, nameObserver);
mBinding.btnSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String anotherName = mBinding.etField.getText().toString();
mModel.getCurrentName().setValue(anotherName);
}
});
}
}
您可以阅读 here 中的实时数据。就像 Observer
寻找数据的变化并通知 observers observable 对象已经改变
简而言之,当我们深入了解 activity/fragment 生命周期处理、显示更新数据以及更重要的是将表示层与业务逻辑分离并创建更好的结构化应用请从 here
中找到更多详细信息ViewModel
和 LiveData
android 架构组件一起帮助创建生命周期感知 应用程序。
ViewModel: ViewModel 类 通常用于将视图逻辑(存在于 Activity 类 中)与包含在 ViewModel 类 中的业务逻辑显着隔离。这种隔离是一种很好的架构设计,在维护大型项目时变得非常重要。
实时数据: LiveData 有助于以生命周期感知方式实施 Observer Observable pattern。
在您的情况下,这似乎微不足道,因为您只是为 TextView
设置值。然而,请考虑常见的场景,例如点击 api 来检索数据等。在这种情况下,ViewModel
负责提供要在 Activity
中显示的数据,当完成LiveData
的帮助可以通过轻松确保生命周期意识来帮助避免崩溃。