MVVM写一个简单的程序

(字体放大会促进学习兴趣哦)

其他相关文章:

android之LifeCycle:https://blog.csdn.net/li6472/article/details/119795952?spm=1001.2014.3001.5501

android之LiveData:https://blog.csdn.net/li6472/article/details/119784791?spm=1001.2014.3001.5501

android之ViewModel:https://blog.csdn.net/li6472/article/details/119800423?spm=1001.2014.3001.5501

android之MVVM框架使用之xml详解:https://blog.csdn.net/li6472/article/details/119762190?spm=1001.2014.3001.5501

android之MVVM理解:https://blog.csdn.net/li6472/article/details/119779950?spm=1001.2014.3001.5501

amdroid之MVVM写一个简单的程序:https://blog.csdn.net/li6472/article/details/119761806?spm=1001.2014.3001.5501

一 首先配置DataBinding如下

写之前花两分钟去复习一下MVVM吧,嘿嘿

https://blog.csdn.net/li6472/article/details/119762190

MVVM的全称是Model(模型)--View(视图)--ViewModel(视图模型):

 以前更新UI需要进入UI线程,影响效率,它解决了将数据分解映射到各个view的问题。什么个意思?具体来说,就是针对每个Activity或者Fragment的布局,在编译阶段,会生成一个ViewDataBinding类的对象,该对象持有Activity要展示的数据和布局中的各个view的引用。同时还有如下优势:将数据分解到各个view、在UI线程上更新数据、监控数据的变化,实时更新,这样一来,你要展示的数据已经和展示它的布局紧紧绑定在了一起。我认为这才是DataBinding真正的魅力所在。
二 创建bean类用于保存和获取数据

public class UserBean {

    private String name; //姓名
    private int age; //年龄

    public UserBean(String name ,int age){
        this.name =name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }


三 XML配置

(客官:花一分钟看一下关于DataBinding的XML文件属性参考https://blog.csdn.net/li6472/article/details/119782825)

3、使用了DataBinding之后的Activity的布局文件activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<layout
    xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable
            name="user"
            type="com.example.androidmvvm.UserBean" />
    </data>
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
       >

    <TextView
        android:id="@+id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{user.name}"/>
        <!--注意:这里age是int类型,必须转化为String,否则会运行时异常-->
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{String.valueOf(user.age)}"
        android:layout_below="@+id/text1"
        />
    </RelativeLayout>
</layout>

注意:这里layout下不能设置窗口大小否则出现如下错误

D:\MyMap\app\src\main\res\layout\activity_main.xml:17: AAPT: error: duplicate attribute.

这里和以前使用的xml不同,根节点变成了layout,里面包括了data节点和传统的布局。这里的data节点作用是连接 View 和 Modle 的桥梁。在这个data节点中声明一个variable变量,那值就可以轻松传到布局文件中来了。而且TextView中没有给控件定义id,而是在text的时候用了@{ }的方法,在括号里面直接引用UserBean对象的属性即可完成赋值。

4、MainActivity
 

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ActivityMainBinding mainBinding = DataBindingUtil.setContentView(this,R.layout.activity_main);
        mainBinding.setUser(new UserBean("张三",33));
    }
}

这个activity很简洁,没有了没有了控件的初始化的findViewById或者butterknife的那一堆注解,也没有了TextView的setText(),也就2行代码而已。大家应该已经看见了,这里用DataBindingUtil.setContentView代替了setContentView,然后创建一个 UserBean 对象,通过 binding.setUser(userBean) 与 variable 进行绑定。注意:这个ActivityMainBinding 是如何生成的呢?他是继承ViewDataBinding,这个类的生成是有规则的,它是根据对应的布局文件的名字生成的,比如:activity_main-->ActivityMainBinding 、fragment-->FragmentBinding即:第一个单词首字母大写,第二个单词首字母大写,最后都会拼上Binding就是生成的Binding类。
去运行吧

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值