Android最近推出了体系结构组件,特别是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应该如何与数据绑定相关联
我的意思是,在数据绑定的情况下,将有一个为UI提供数据的binding。
会是这样吗?
...
model.getUsers().observe(this, users -> {
// update binding, that will auto-update the UI?
});
...发布于 2017-06-08 19:17:33
可以在布局xml文件中声明视图模型类型的变量。在viewmodel类中,实现将数据绑定到ui的公共方法。
然后,您只需要在onCreate中将视图模型设置为绑定。当您在数据库中设置视图模型实例时,已经加载到viewmodel中的数据将被设置为重新创建布局。
如果您的布局中有一个回收器视图,您可以在视图模型类中实现一些公共方法,比如initRecyclerView(),然后在onCreate()中调用它,然后在绑定中设置视图模型,或者也可以通过绑定从视图模型设置适配器。
发布于 2017-07-06 06:52:32
您的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>你的活动类看起来就像
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;
}https://stackoverflow.com/questions/44442251
复制相似问题