当前位置: 首页 > news >正文

Android : DataBinding 简化开发 简单应用

1.导包 ViewModel 用于观察数据

// 使用androidx版本库  ViewModelProviders
implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0-alpha03'

2.在build.gradle 添加  在android 代码块中添加  复制后点更新(Sync Now)


android{...// 步骤1.开启data bindingdataBinding {enabled = true}...
}//或者android{...defaultConfig{...dataBinding.enabled true}}

3.写个类继承 ViewModel

package com.example.mydatabinding;import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;public class MyViewModel extends ViewModel {private MutableLiveData<Integer> data;public MutableLiveData<Integer> getData() {if(data == null){data = new MutableLiveData<>();data.setValue(0);}return data;}public void add(){data.setValue(data.getValue() + 1);}
}

4.修改xml  activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- 步骤2. 点击小灯泡生成新的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><variablename="dataIs"type="com.example.mydatabinding.MyViewModel" /></data><androidx.constraintlayout.widget.ConstraintLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><!--设置数据android:text="@{String.valueOf(dataIs.data)}"--><TextViewandroid:textSize="24sp"android:id="@+id/tv_content"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{String.valueOf(dataIs.data)}"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.526"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintVertical_bias="0.191" /><!--点击事件 调用类中的方法android:onClick="@{() -> dataIs.add()}"--><Buttonandroid:onClick="@{() -> dataIs.add()}"android:id="@+id/btn_test"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/btn_txt"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.528"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintVertical_bias="0.33" /></androidx.constraintlayout.widget.ConstraintLayout>
</layout>

5.简化后的代码 MainActivity.java

package com.example.mydatabinding;import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;import com.example.mydatabinding.databinding.ActivityMainBinding;public class MainActivity extends AppCompatActivity {private MyViewModel myViewModel;//    private TextView textView;
//    private Button button;//3.xml重新生成后就有了 ActivityMainBinding 对象,不是固定的 ,根据layout中起的名字 会生成不同的Binding对象private ActivityMainBinding binding;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//就可以不用了
//        setContentView(R.layout.activity_main);//获取到xml主布局中的所有的viewbinding = DataBindingUtil.setContentView(this,R.layout.activity_main);
//
//        button = findViewById(R.id.btn_test);
//        textView =findViewById(R.id.tv_content);myViewModel = ViewModelProviders.of(this).get(MyViewModel.class);// xml 中的 dataIsbinding.setDataIs(myViewModel);binding.setLifecycleOwner(this); //观察//观察 也可消掉/* myViewModel.getData().observe(this, new Observer<Integer>() {@Overridepublic void onChanged(Integer integer) {//内容发生改变
//                textView.setText(String.valueOf(integer));binding.tvContent.setText(String.valueOf(integer));}});
*///事件 也可以消掉/*binding.btnTest.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//调用 方法myViewModel.add();}});*/}
}

http://www.lryc.cn/news/254078.html

相关文章:

  • 计算机网络:应用层(下篇)
  • 干货分享 | TSMaster小程序启动和停止的自动化控制流程
  • AI视频智能分析识别技术的发展与EasyCVR智慧安防视频监控方案
  • 外包干了2个月,技术倒退2年。。。
  • 书-用数组存储高于60低于70的人单独存起来
  • 三、DVP摄像头调试笔记(图片成像质量微调整,非ISP)
  • Linux--程序地址空间
  • 【超全】React学习笔记 下:路由与Redux状态管理
  • matplotlib学习
  • 【网络安全】-安全常见术语介绍
  • C语言给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)
  • vue+elementUI的tabs与table表格联动固定与滚动位置
  • 鸿蒙4.0开发笔记之ArkTS语法基础之应用生命周期与页面中组件的生命周期(十六)
  • Android的前台服务
  • 99%小白不知道,BI报表能自动生成
  • rabbitmq技术
  • 鸿蒙4.0开发笔记之ArkTS语法基础之条件渲染和循环渲染的使用(十五)
  • 电子设备电路分析(2)-----高速激光脉冲探测器
  • WordPress(9)宝塔配置Redis
  • 【Qt之QSqlRelationalTableModel】描述及使用
  • 【Openstack Train安装】四、MariaDB/RabbitMQ 安装
  • 工业级路由器在智能交通系统(ITS)中的创新应用
  • React立即更新DOM
  • [JavaScript前端开发及实例教程]计算器井字棋游戏的实现
  • 数据结构 / 队列 / 循环队列 / 结构体定义和创建
  • Java零基础——Redis篇
  • 分支和循环
  • MyBatis-xml版本
  • 在eclipse中安装python插件:PyDev
  • 25、pytest的测试报告插件allure