首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ViewModel与数据绑定

ViewModel与数据绑定
EN

Stack Overflow用户
提问于 2017-06-08 17:36:04
回答 2查看 8.6K关注 0票数 9

Android最近推出了体系结构组件,特别是ViewModel,它是

设计用于存储和管理与UI相关的数据,以便数据能够经受住诸如屏幕旋转之类的配置更改。

在Google提供的例子中,ViewModel的用法如下:

代码语言:javascript
复制
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

会是这样吗?

代码语言:javascript
复制
...
model.getUsers().observe(this, users -> {
  // update binding, that will auto-update the UI?
});
...
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-08 19:17:33

可以在布局xml文件中声明视图模型类型的变量。在viewmodel类中,实现将数据绑定到ui的公共方法。

然后,您只需要在onCreate中将视图模型设置为绑定。当您在数据库中设置视图模型实例时,已经加载到viewmodel中的数据将被设置为重新创建布局。

如果您的布局中有一个回收器视图,您可以在视图模型类中实现一些公共方法,比如initRecyclerView(),然后在onCreate()中调用它,然后在绑定中设置视图模型,或者也可以通过绑定从视图模型设置适配器。

票数 2
EN

Stack Overflow用户

发布于 2017-07-06 06:52:32

您的layout_name.xml文件看起来就像

代码语言:javascript
复制
<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>

你的活动类看起来就像

代码语言:javascript
复制
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类看起来就像

代码语言:javascript
复制
public class ViewModelName extends BaseObservable{
    //Logic and variables for view model
    public boolean someVariable;
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44442251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档