返回

ViewModel,Jetpack之界面数据存储组件

Android

Jetpack ViewModel是一个轻量级的UI组件,它与Android生命周期感知,这意味着它可以在UI生命周期的不同阶段生存。ViewModel通常用于存储与UI相关的数据,例如表单输入、列表项或网络请求的结果。

ViewModel有几个优点:

  • 它可以是Fragment共享数据的桥梁。
  • 它可以是屏幕方向切换时的数据来源。
  • 它是MVVM架构的数据提供者。
  • 使用LiveData可以使其变成可观察的数据。

如何使用ViewModel?

  1. 在你的项目中添加Jetpack库。
  2. 在你的活动或片段中创建一个ViewModel类。
  3. 在你的布局文件中使用ViewModel。
  4. 在你的代码中更新ViewModel的数据。
  5. 在你的布局文件中观察ViewModel的数据。

ViewModel的例子

以下是一个使用ViewModel存储表单输入的例子:

public class MyViewModel extends ViewModel {

    private MutableLiveData<String> firstName = new MutableLiveData<>();
    private MutableLiveData<String> lastName = new MutableLiveData<>();

    public void setFirstName(String firstName) {
        this.firstName.setValue(firstName);
    }

    public void setLastName(String lastName) {
        this.lastName.setValue(lastName);
    }

    public LiveData<String> getFirstName() {
        return firstName;
    }

    public LiveData<String> getLastName() {
        return lastName;
    }
}

在你的活动或片段中,你可以这样使用ViewModel:

public class MyActivity extends AppCompatActivity {

    private MyViewModel viewModel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);

        viewModel = ViewModelProviders.of(this).get(MyViewModel.class);

        viewModel.getFirstName().observe(this, new Observer<String>() {
            @Override
            public void onChanged(String firstName) {
                // 更新UI
            }
        });

        viewModel.getLastName().observe(this, new Observer<String>() {
            @Override
            public void onChanged(String lastName) {
                // 更新UI
            }
        });
    }
}

在你的布局文件中,你可以这样使用ViewModel:

<EditText
    android:id="@+id/firstName"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@{viewModel.firstName}" />

<EditText
    android:id="@+id/lastName"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@{viewModel.lastName}" />

这种技术可以帮助你创建更模块化、更易于测试的Android应用程序。