代码编织梦想

没有使用DataBinding时
MainActivity.java代码:

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

    textView = findViewById(R.id.textView);
    button = findViewById(R.id.button);
    myViewModel = new ViewModelProvider(this,new ViewModelProvider.NewInstanceFactory()).get(MyViewModel.class);

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            myViewModel.add(1);
        }
    });

    myViewModel.getNumber().observe(this, new Observer<Integer>() {
        @Override
        public void onChanged(@Nullable Integer integer) {
            textView.setText(String.valueOf(integer));
        }
    });
    
}

MyViewModel代码:

public MutableLiveData<Integer> getNumber() {
    if (number ==null){
        number = new MutableLiveData<>();
        number.setValue(0);
    }
    return number;
}
public void add (int n){
    number.setValue(number.getValue()+n);
}

使用DataBinding的步骤:
先在gradle module中android{}内添加一段话:
dataBinding{
enabled true
}
添加红圈中的这句话
之后进入到activity_main.xml文件中的代码
点击左上角的黄色灯泡选择convert to data binding layout
系统会生成
layout
data
/data
/layout
两个标签

这时我们可以注释掉onCreate中的setContentView(R.layout.activity_main);

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

然后补充
binding = DataBindingUtil.setContentView(this,R.layout.activity_main);来代替上面注释掉的这段话
这时xml中的标签、关键词都会成为类的一个成员
所以可以继续去除声明变量和变量的定位函数
//TextView textView;
//Button button;
//textView = findViewById(R.id.textView);
//button = findViewById(R.id.button);

再在之前说到的data标签中添加在这里插入图片描述
textview改写为:
android:text="@{String.valueOf(data.number)}"
再为button添加一个函数:
android:onClick="@{()->data.add(1)}"
补充:
@{} 大括号之间填写java代码
()->是调用函数
现在,调用函数的操作我们就在xml中完成了,所以我们可以注释掉mainActivity.java中的两个函数在这里插入图片描述
添加

binding.setData(myViewModel);
binding.setLifecycleOwner(this);
两句话,代码修改完毕
最终mainAcitivity.class代码变成:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
    myViewModel = new ViewModelProvider(this,new ViewModelProvider.NewInstanceFactory()).get(MyViewModel.class);
    binding.setData(myViewModel);
    binding.setLifecycleOwner(this);

Activity_main.xml文件代码变为:

<?xml version="1.0" encoding="utf-8"?>

<data>
    <variable
        name='data'
        type='com.example.databinding.MyViewModel'
        />
</data>

<android.support.constraint.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{String.valueOf(data.number)}"
        android:textSize="30sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHorizontal_bias="0.497"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.222" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button1"
        android:onClick="@{()->data.add(1)}"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/LLL_WD/article/details/110476948

游戏优化系列一:海外谷歌应用适配相关-爱代码爱编程

作者 大家好,我叫Jack冯; 本人20年硕士毕业于广东工业大学,于2020年6月加入37手游安卓团队;目前主要负责海外游戏发行安卓相关开发。   系列目录 * 游戏优化系列一:海外谷歌应用适配相关(本章讲解) * 游戏优化系列二:Android Studio制作图标教程 * 游戏优化系列三:Unity游戏的黑屏问题解决方法   背景

获取根目录(安卓10之后根目录获取方式有变化)-爱代码爱编程

  可以在Androidmainfest 里面的application添加 android:requestLegacyExternalStorage="true" 使用原来的存储方式 或者10之后默认系统分配目录 // public String getPath(Context context) { File dir = null;

uni-app 开发app 打包后的尺寸与使用hbuilderx预览时不符-爱代码爱编程

uni-app 开发app 打包后的尺寸与使用hbuilderx预览时不符 uni-app rpx 比例失调 uni-app 开发app 横屏或者 屏幕尺寸过大时 样式错乱 uni-app 有解决方案,只是我们漏看了 或者 忽略了 解决办法(亲尝有效) 链接: rpx失调 { "globalStyle": { "rpxCa

2、Android开发初体验-爱代码爱编程

Android开发初体验 文章目录 Android开发初体验第一步:第二步:第三步:第四步:代码块第五步: 参考书目:《Android 编程权威指南》 本次将带你开发本书第一个应用, 并借此学习一些Android基本概念以及构成应用的UI组件。马上要开发的应用名叫GeoQuiz,它能给出一道道地理知识问题。用户点击TRUE或FALSE按钮来

游戏优化系列二:Android Studio制作图标教程-爱代码爱编程

作者 大家好,我叫Jack冯; 本人20年硕士毕业于广东工业大学,于2020年6月加入37手游安卓团队;目前主要负责海外游戏发行安卓相关开发。 系列目录 * 游戏优化系列一:海外谷歌应用适配相关 * 游戏优化系列二:Android Studio制作图标教程(**本章讲解**) * 游戏优化系列三:Unity游戏的黑屏问题解决方法   背景

adb与遥控器按键相关的指令-爱代码爱编程

  输入按键   adb shell tai:/ $ input keyevent 172         或 intput keyevnet KEYCODE_GUIDE     输入文本 adb shell input text xxxxx adb shell input tex

xml文档解析报错解决办法-爱代码爱编程

最近新增了一个业务,任意退回的功能,但是在调用对方接口的时候总是报错 Nested exception: org.xml.sax.SAXParseException: The content of elements must consist of well-formed character data or markup. 经过排查是因为xml格式有问题 &

Spring注解开发-爱代码爱编程

Spring注解开发 xml配置测试配置类注入测试 xml配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.o

JAVA DOM 添加删除元素父标签 wrap/unwrap-爱代码爱编程

定义:wrap() 方法为被选元素添加父元素; unwrap() 方法删除被选元素。 public static void main(String[] args) { //img标签添加fingure父标签,如果父标签非p标签进行替换 String html = "<p><img src=\"https://www.ba

QT读写XML文件,XML读写复杂结构体-爱代码爱编程

文件格式 根据文件格式来读写,对应起来分析,想要更复杂的自己按格式创建,读取就可以了,有问题可以评论噢~,读取的时候如果有问题可以参考我另外一个文章! <?xml version="1.0" encoding="UTF-8"?> <TT> <Fiter0> <group id="Al"&

谈谈SpringBoot配置文件(一)-爱代码爱编程

1.配置文件 SpringBoot使用一个全局的配置文件,配置文件名是固定的; · application.properties· application.yml 配置文件的作用:修改SpringBoot自动配置的默认值 YAML(YAML Ain’t Markup Language) 既是一个标记语言,又不是一个标记语言,是不是很矛盾,总之跟标记

Java学习:使用Freemarker导出简单的Word文档-爱代码爱编程

一、准备工作 准备想要导出的word文档的模板 准备maven的依赖 <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2