为什么我们需要LiveData和ViewModel

时间:2018-07-26 06:05:56

标签: android android-livedata mutablelivedata

我已使用LiveData and ViewModel示例 但是我不理解此功能的使用,因为即使使用观察代码来增加代码行数,也可以使用ViewModel创建MutableLiveData来直接更改值而无需使用此功能。

ViewModel代码下方     公共类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;
    }


}

在活动中使用

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);
            }
        });

    }
}

3 个答案:

答案 0 :(得分:1)

ViewModelLiveData的Android体系结构组件共同帮助创建了生命周期感知型应用程序。

ViewModel: ViewModel类通常用于将视图逻辑(存在于Activity类中)与ViewModel类中包含的业务逻辑进行显着隔离。这种隔离是一种好的架构设计,并且在维护大型项目时变得非常重要。

LiveData: LiveData有助于以生命周期感知的方式实现Observer Observable pattern

在您的情况下,这似乎很琐碎,因为您只是为TextView设置值。不过,请考虑常见的情况,例如点击api检索数据等。在这种情况下,ViewModel负责提供要显示在Activity中的数据,在{{ 1}}可以通过轻松确保生命周期意识来帮助避免崩溃。

答案 1 :(得分:0)

您可以从here阅读有关实时数据的信息。就像Observer一样,它查找数据更改并通知观察者 可观察的对象已更改

答案 2 :(得分:0)

简而言之,当我们进入活动/片段生命周期处理,显示更新的数据以及更重要的是将表示层与业务逻辑分离并创建结构更好的应用程序时,它使您的程序员生活变得轻松自如。请从here

中查找更多详细信息