2024年Android最新android:DataBinding使用小结(一)(1),2024年最新android高阶面试题

最后

希望本文对你有所启发,有任何面试上的建议也欢迎留言分享给大家。

好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划,来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。

好了~如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。

为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!希望读到这的您能点个小赞和关注下我,以后还会更新技术干货,谢谢您的支持!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

android:text=“@{user.lastName}”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content” />

  • 将activity中的数据绑定到xml中

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

User user = new User();

user.setFristName(“huang”);

user.setLastName(“xiaoguo”);

// 第三步:使用 ActivityMainBinding

ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);

/**

  • 将数据绑定到xml

*/

// 方法一:(常用)

//binding.setUser(user);

//方法二:

binding.setVariable(BR.user,user);

}

}

  • 其他引入数据姿势

如果用户类型要多处用到,也可以直接将之后导入进来,

这样就不用每次都指明整个包名路径了,

而java.lang.*包中的类会被自动导入,所以可以直接使用

<variable

name=“user”

type=“User”/>

如果存在进口的类名相同的情况,可以使用别名指定别名

<import

alias=“TwoUser”

type=“tsou.cn.databinding.bean2.User” />

<variable

name=“user”

type=“User” />

<variable

name=“twoser”

type=“TwoUser” />

  • xml中字符串拼接

在这里插入图片描述

三、事件绑定


  • 创建Presenter类

public class Presenter{

//普通方法绑定

public void onTextChanged( CharSequence s,int start,int before,int color){

user.setFristName(s.toString());

binding.setUser(user);

}

//普通方法绑定

public void onClick(View view){

Toast.makeText(MainActivity.this.getApplicationContext(),“点击了”,Toast.LENGTH_LONG).show();

}

//监听器绑定,可以返回数据

public void onClickListenerBinding(User user){

Toast.makeText(MainActivity.this.getApplicationContext(),user.getLastName(),Toast.LENGTH_LONG).show();

}

}

  • 在xml中传入presenter并进行绑定
<?xml version="1.0" encoding="utf-8"?>

第二步:在布局中跟节点添加layout

–>

<layout xmlns:android=“http://schemas.android.com/apk/res/android”

xmlns:tools=“http://schemas.android.com/tools”>

<variable

name=“user”

type=“tsou.cn.databinding.bean.User” />

<variable

name=“presenter”

type=“tsou.cn.databinding.MainActivity.Presenter” />

<LinearLayout

android:layout_width=“match_parent”

android:layout_height=“match_parent”

android:orientation=“vertical”

tools:context=“tsou.cn.databinding.MainActivity”>

<EditText

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:hint=“输入 Frist Name”

android:onTextChanged=“@{presenter.onTextChanged}” />

<EditText

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:hint=“输入 Last Name” />

<TextView

android:layout_gravity=“center”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:onClick=“@{presenter.onClick}”

android:text=“@{user.fristName}” />

<TextView

android:layout_gravity=“center”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:onClick=“@{()->presenter.onClickListenerBinding(user)}”

android:text=“@{user.lastName}” />

  • acticity中绑定Presenter对象

binding.setPresenter(new Presenter());

  • 效果如下:

这里写图片描述

四、xml中对表达式的支持


支持的运算符:

  • 数学运算符: + - / * %

  • 字符串拼接: +

  • 逻辑运算符: && ||

  • 二进制: & | ^

  • 一元运算符: +

  • 位运算符: >> >>> <<

  • 比较: == > < >= <=

  • instanceof

  • ()

  • 数据类型: character, String, numeric, null

  • 类型转换(ClassCast)

  • 方法回调(Method calls)

  • 数据属性

  • 数组:[]

  • 三元操作符:?

例如:

android:text=“@{String.valueOf(index + 1)}”

android:visibility=“@{age < 13 ? View.GONE : View.VISIBLE}”

android:background=“@{true ? @color/colorAccent : @color/colorPrimary}”

android:transitionName=‘@{“image_” + id}’

一些在java中常用而DataBinding xml中不支持的:

  • this

  • super

  • new

  • 泛型

空合并运算符

android:text=“@{user.displayName ?? user.lastName}”

等价于

android:text=“@{user.displayName != null ? user.displayName : user.lastName}”

  • view的显示和隐藏

在xml data节点下引入view

view的显示和隐藏

<TextView

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_gravity=“center”

android:text=“是否显示”

android:textColor=“@color/colorAccent”

android:textSize=“24sp”

android:visibility=“@{user.isShow ? View.VISIBLE:View.GONE }” />

五、include的使用##


  • 创建include布局
<?xml version="1.0" encoding="utf-8"?>

在布局中跟节点添加layout

–>

<layout xmlns:android=“http://schemas.android.com/apk/res/android”

xmlns:tools=“http://schemas.android.com/tools”>

<variable

name=“user”

type=“tsou.cn.databinding.bean.User” />

<LinearLayout

android:layout_width=“match_parent”

android:layout_height=“match_parent”

android:orientation=“vertical”>

<TextView

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_gravity=“center”

android:text=“@{user.fristName}” />

<TextView

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_gravity=“center”

android:text=“@{user.lastName}” />

  • 使用include布局并传递数据

<include

layout=“@layout/include_layout”

bind:user=“@{user}” />

  • 效果如下

这里写图片描述

六、ViewStub使用


  • ViewStub布局
<?xml version="1.0" encoding="utf-8"?>

在布局中跟节点添加layout

–>

<variable

name=“user”

type=“tsou.cn.databinding.bean.User” />

<LinearLayout

android:layout_width=“match_parent”

android:layout_height=“match_parent”

android:orientation=“vertical”>

<ImageView

android:layout_width=“100dp”

android:layout_height=“100dp”

android:layout_gravity=“center”

android:src=“@mipmap/ic_launcher_round” />

<TextView

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:text=“@{user.imageId}” />

  • 调用ViewStub

<ViewStub

android:id=“@+id/view_stub”

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:layout=“@layout/viewstub”

bind:user=“@{user}” />

  • 加载viewStub

//使用viewStub

binding.viewStub.getViewStub().inflate();

七、BaseObservable数据更新监听使用


  • 将javaBean继承BaseObservable

package tsou.cn.databinding.bean;

import android.databinding.BaseObservable;

import android.databinding.Bindable;

import tsou.cn.databinding.BR;

/**

  • Created by Administrator on 2018/5/25 0025.

*/

//BaseObservable数据自动更新的使用

public class User extends BaseObservable {

private String fristName;

private String lastName;

private String imageUrl;

private boolean isShow;

@Bindable

public boolean getIsShow() {

return isShow;

}

public void setIsShow(boolean show) {

isShow = show;

notifyPropertyChanged(BR.isShow);

}

@Bindable

public String getImageUrl() {

return imageUrl;

}

public void setImageUrl(String imageUrl) {

this.imageUrl = imageUrl;

notifyPropertyChanged(BR.imageUrl);

}

@Bindable

public String getFristName() {

return fristName;

}

public void setFristName(String fristName) {

this.fristName = fristName;

notifyPropertyChanged(BR.fristName);

}

@Bindable

public String getLastName() {

return lastName;

}

public void setLastName(String lastName) {

this.lastName = lastName;

notifyPropertyChanged(BR.lastName);

}

}

注意:

1、首先当前类继承BaseObservable

2、对于get方法添加@Bindable注解

3、引入BR.lastName等报错时,需要对项目先进行一下修复

  • 布局中进行监听

<EditText

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:hint=“输入 Frist Name”

android:onTextChanged=“@{presenter::onTextChanged}” />

  • 调用方法

public class Presenter {

//普通方法绑定

public void onTextChanged(CharSequence s, int start, int before, int color) {

user.setFristName(s.toString());

//此时不需要再次手动进行更新数据对象了

// binding.setUser(user);

}

}

八、ObservableField数据监听的使用


ObservableField是为了解决一个数据类中不需要所有的数据都进行监听时代替BaseObservable,让类当前类不需要继承BaseObservable也不需要重新notifyPropertyChanged方法

  • 在数据类中

/**

  • 在单个或者比较少的数据需要监听时使用ObservableField

  • (ObservableBoolean,ObservableChar,ObservableInt,ObservableParcelable…)

*/

private ObservableField isShow = new ObservableField<>();

public ObservableField getIsShow() {

return isShow;

}

public void setIsShow(boolean show) {

/**

  • 如果是Observable*类型设置数据需要使用set

*/

this.isShow.set(show);

}

  • 布局中使用

<TextView

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_gravity=“center”

android:text=“是否显示”

android:textColor=“@color/colorAccent”

android:textSize=“24sp”

android:visibility=“@{user.isShow ? View.VISIBLE:View.GONE }” />

  • 更新数据

public class Presenter {

//普通方法绑定

public void onTextChanged(CharSequence s, int start, int before, int color) {

user.setFristName(s.toString());

//这里直接更改数据就好

user.setIsShow(!user.getIsShow().get());

// binding.setUser(user);

}

}

九、ObservableArrayList和ObservableArrayMap的使用


  • 在数据类中

private ObservableArrayList nums;

private ObservableArrayMap<String,String> maps;

public ObservableArrayList getNums() {

return nums;

}

public void setNums(ObservableArrayList nums) {

this.nums=nums;

}

public ObservableArrayMap<String, String> getMaps() {

return maps;

}

public void setMaps(ObservableArrayMap<String, String> maps) {

this.maps = maps;

}

  • 布局中使用

<TextView

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_gravity=“center”

android:text=“@{user.nums[0]}” />

<TextView

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_gravity=“center”

android:text=‘@{user.maps[“name”]}’ />

  • 添加数据

全局集合对象

private ObservableArrayList nums = new ObservableArrayList<>();

private ObservableArrayMap<String, String> maps = new ObservableArrayMap<>();

在绑定数据之前添加集合对象

//ObservableArrayList和ObservableArrayMap的使用:添加对象

user.setNums(nums);

user.setMaps(maps);

/**

  • 将数据绑定到xml

*/

// 方法一:

//binding.setUser(user);

//方法二:

binding.setVariable(BR.user, user);

更改数据

nums.add(“我是ObservableArrayList”);

maps.put(“name”, “我是ObservableArrayMap”);

十、BindingAdapter的使用


  • 使用BindingAdapter构建图片加载方法

/**

  • Created by Administrator on 2018/5/30 0030.

*/

public class ImageUtil {

新的开始

改变人生,没有什么捷径可言,这条路需要自己亲自去走一走,只有深入思考,不断反思总结,保持学习的热情,一步一步构建自己完整的知识体系,才是最终的制胜之道,也是程序员应该承担的使命。

《系列学习视频》

《系列学习文档》

《我的大厂面试之旅》

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

private ObservableArrayList nums = new ObservableArrayList<>();

private ObservableArrayMap<String, String> maps = new ObservableArrayMap<>();

在绑定数据之前添加集合对象

//ObservableArrayList和ObservableArrayMap的使用:添加对象

user.setNums(nums);

user.setMaps(maps);

/**

  • 将数据绑定到xml

*/

// 方法一:

//binding.setUser(user);

//方法二:

binding.setVariable(BR.user, user);

更改数据

nums.add(“我是ObservableArrayList”);

maps.put(“name”, “我是ObservableArrayMap”);

十、BindingAdapter的使用


  • 使用BindingAdapter构建图片加载方法

/**

  • Created by Administrator on 2018/5/30 0030.

*/

public class ImageUtil {

新的开始

改变人生,没有什么捷径可言,这条路需要自己亲自去走一走,只有深入思考,不断反思总结,保持学习的热情,一步一步构建自己完整的知识体系,才是最终的制胜之道,也是程序员应该承担的使命。

《系列学习视频》
[外链图片转存中…(img-UD9GiHvf-1715665035280)]

《系列学习文档》

[外链图片转存中…(img-cC8YmuPa-1715665035280)]

《我的大厂面试之旅》

[外链图片转存中…(img-WcxOyIZ4-1715665035281)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值