Android最近推出了Architecture Components,特别是ViewModel,这是
旨在存储和管理与UI相关的数据,以便数据能够在配置更改(如屏幕旋转)
后继续存在
在Google提供的示例中,ViewModel的使用方式如下:
public class MyActivity extends AppCompatActivity {
public void onCreate(Bundle savedInstanceState) {
MyViewModel model = ViewModelProviders.of(this).get(MyViewModel.class);
model.getUsers().observe(this, users -> {
// update UI
});
}
}
问题:ViewModel如何假设与Data Binding相关联?
我的意思是,在数据绑定的情况下,将会有一个binding
为UI提供数据。
它会是这样的:
...
model.getUsers().observe(this, users -> {
// update binding, that will auto-update the UI?
});
...
答案 0 :(得分:3)
您可以在布局xml文件中声明viewmodel类型的变量。 在您的viewmodel类中实现公共方法,数据将通过该方法绑定到ui。
然后,您只需要在onCreate中将视图模型设置为绑定。在数据绑定中设置视图模型实例时,已在viewmodel中加载的数据将设置为重新创建的布局。
如果您的布局中有回收器视图,您可以在视图模型类中实现一些公共方法,如initRecyclerView(),并在绑定中设置视图模型后调用onCreate(),或者可以从视图模型设置适配器数据绑定也是如此。
答案 1 :(得分:-1)
您的layout_name.xml文件看起来像
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="android.view.View"/>
<variable
name="model"
type="com.yourpackage.ViewModelName"/>
</data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:visibility="@{model.someVariable == true ? View.VISIBLE : View.GONE}">
</RelativeLayout>
</layout>
您的Activity类看起来像
public class YourActivityName extends BaseActivity
{
private ViewModelName viewModelVariable;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ViewModelName viewModelVariable = new ViewModelName();
ViewDataBinding viewDataBinding = DataBindingUtil.setContentView(this, R.layout.layout_name);
viewDataBinding.setVariable(BR.model, viewModelVariable);
}
}
ViewModel类看起来像
public class ViewModelName extends BaseObservable{
//Logic and variables for view model
public boolean someVariable;
}