Android从零开始搭建MVVM架构(1)—,2024年最新蚂蚁金服现场面试

在Adapter里只需要职业

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
ItemNewOrderBinding binding = DataBindingUtil.inflate(LayoutInflater.from(viewGroup.getContext()), R.layout.item_new_order, viewGroup, false);
return new NewViewHolder(binding);
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
NewViewHolder newViewHolder = (NewViewHolder) viewHolder;
//如果是多布局,那么对binding进行一个 instansof的一个判断就好。这样我们的ViewHolder永远只需要一个
ItemNewOrderBinding binding = (ItemNewOrderBinding) newViewHolder.binding;
binding.txtName.setText(“这样就能使用了!!”);
}

三、单向数据绑定

单向绑定可以理解为,改变了bean对象里的数据,就会自动改变我们xml的显示。这里涉及到3个类: BaseObservable、ObservableField、ObservableCollection。看这个名字就知道有点类似观察者模式

3.1、BaseObservable

首先我们定义个以Dog类

public class Dog extends BaseObservable {

//如果是public修饰的,直接用@Bindable
@Bindable
public String name;
//如果是private修饰的,则在get方法使用@Bindable
private String color;

public void setDataOnlyName(String name, String color) {
this.name = name;
this.color = color;
//只刷name字段
notifyPropertyChanged(com.lihang.databindinglover.BR.name);
}

public void setDataAll(String name, String color) {
this.name = name;
this.color = color;
//刷新全部字段
notifyChange();
}
…//省略部分代码
}

这里我同事改变了name和color的颜色,说明

  • bean对象需要继承 BaseObservable
  • @Bindable 标注用来表示哪个字段需要单向绑定。public修饰的可以直接用@Bindable绑定。private修饰的需要在get()方法上用@Bindable标注
  • notifyChange();刷新所有字段,notifyPropertyChanged(com.lihang.databindinglover.BR.name);刷新单个字段。注意这里说的刷新全是被@Bindable绑定的。如果BR.name出不来。建议build下项目
  • 还有不明白的可以在末尾链接demo看:单向数据绑定 – BaseObservable.

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

继承了BaseObservable的bean对象,还可以监听刷新了哪

dog.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {
@Override
public void onPropertyChanged(Observable sender, int propertyId) {
if (propertyId == com.lihang.databindinglover.BR.name) {
Log.e(“看看刷新了哪”, “刷新了name”);
} else if (propertyId == com.lihang.databindinglover.BR._all) {
Log.e(“看看刷新了哪”, “全部全部”);
} else {
Log.e(“看看刷新了哪”, “未知错误~”);
}
}
});

3.2、ObservableField

其实这个ObservableField就是对BaseObservable的简化,不用继承,不用主动调刷新代码。
这个时候我们顶一个Human类

public class Human {
//这里必须是常量,ObservableField<参数类型>
//其实写上了下面一句,就是BaseObservable,set,get, @Bindable,刷新都封装了。直接看构造方法
public final ObservableField name = new ObservableField<>();
//其中也封装了基本数据类型:ObservableInt等
public final ObservableInt age = new ObservableInt();

public Human(String name,int age){
this.name.set(name);
this.age.set(age);
}

}

Activity和xml里的操作和之前的一样,改变数据,自动改变xml只需要:

//简直太方便了吧
human.name.set(“玉玑子”);
human.age.set(15);

3.3、ObservableCollection

一看就是集合,这里和我们常用的 List Map一样。只不过这里的ObservableList、ObservableMap是封装好的。当我们改变集合里的数据时。xml也会改变。唯一要注意的是,在xml里引用这些集合的时候<类型>,这些符号,会影响xml格式所以要转义。用< 代表<;用&gt代表>(这些转义符,同样支持Mark Down);想了解更多可自行百度 DataBinding转义符。


这里遇到一个坑,就是你的default = “默认值” 这个默认值最好不是data里的引用。不然会报错哦。这里我们带入index = 0 带入,把key = name。代入,然后动态改变,集合里这2个值:

@Override
public void onClick(View v) {
int randowInt = new Random().nextInt(100);
switch (v.getId()){
case R.id.btn_index:
//改变list的第一项
list.add(0,“list的值” + randowInt);
break;
case R.id.btn_key:
map.put(“name”,“map的值” + randowInt);
break;
}
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

四、双向数据绑定

意思就是你改变bean对象里的值,他会主动改变xml的显示,改变xml的里的值,他会把bean对象里的属性改变了。 这里我们用1个TextView显示数据;用1个EditTextView绑定bean对象,再用1个Button可以动态查询bean对象里的属性值



bean对象绑定xml显示:单向绑定是@{属性值},双向绑定则是@={属性值},效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

五、在include 和 viewStub中使用

5.1 在include中使用。

include的布局如下:

Activity里引用include这样:

注意:app:user=“@{user}”。第一个user是include里name的引用。第二user是当前传入的值。

5.2、viewStub中的使用

简单介绍下viewStub:被viewStub包裹的。即使页面显示的时候,被包裹的布局也不会加载,除非调用inflate。这样算是对布局卡顿的优化了。include则算是代码里的布局优化。

直接放Activity布局了。被包裹的布局和上面的include一样


activity里:

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_viewstub);
binding = DataBindingUtil.setContentView(this, R.layout.activity_viewstub);
User user = new User(“我爱学习”, 18);
binding.viewStub.getViewStub().inflate();
binding.setUser(user);
}

六、@BindingAdapter的使用。

这里比较重要的用法是,当我们的imageView需要加载网络url时,假如用的是glide去加载,这个时候就需要使用@BindingAdapter。 这个需要一个辅助类:new一个辅助类后,xml里就可以使用了。有点像Dagger2

public class DataBindingHelper {
//用@BindingAdapter标注,有点类似自定义属性,后面是属性名,方法体类似得到属性值后去做的事情。
//第一个参数:是当前的控件类型,其实也可以写成View,但是要加载还是要判断是否是imageView
//第二个参数:是网络加载的url。
@BindingAdapter(“imageWithGlide”)
public static void loadImage(ImageView imageView, String url) {
Glide.with(imageView).load(url)
.placeholder(R.mipmap.ic_launcher)
.error(R.mipmap.ic_launcher)
.transition(withCrossFade())
.centerCrop()
.into(imageView);
}

//@BindingAdapter还能修改系统属性值,这是修改textView的属性,意思只要使用DataBinding给textView设置setText值的,
//都会加上后面这段 " - 我是通过方法加的"
//我这里先注释掉了。不然整个项目的textView都会加上整个,如果要测试,可以打开
//@BindingAdapter(“android:text”)
//public static void setText(TextView textView, String testStr) {
// textView.setText(testStr + " - 我是通过方法加的");
//}
}

我们的xml就是专业:

activity里就是设置imageUrl和testStr的值。太简单就不写了。

七、DataBinding布局里支持的语法

支持的语法:

  • 算术 + - / * %
  • 字符串合并 +
  • 逻辑 && ||
  • 二元 & | ^
  • 一元 + - ! ~
  • 移位 >> >>> <<

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

学习分享

在当下这个信息共享的时代,很多资源都可以在网络上找到,只取决于你愿不愿意找或是找的方法对不对了

很多朋友不是没有资料,大多都是有几十上百个G,但是杂乱无章,不知道怎么看从哪看起,甚至是看后就忘

如果大家觉得自己在网上找的资料非常杂乱、不成体系的话,我也分享一套给大家,比较系统,我平常自己也会经常研读。

2021最新上万页的大厂面试真题

七大模块学习资料:如NDK模块开发、Android框架体系架构…

只有系统,有方向的学习,才能在段时间内迅速提高自己的技术。

这份体系学习笔记,适应人群:
第一,学习知识比较碎片化,没有合理的学习路线与进阶方向。
第二,开发几年,不知道如何进阶更进一步,比较迷茫。
第三,到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。如果你有需要,我这里恰好有为什么,不来领取!说不定能改变你现在的状态呢!
由于文章内容比较多,篇幅不允许,部分未展示内容以截图方式展示 。

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

七大模块学习资料:如NDK模块开发、Android框架体系架构…

[外链图片转存中…(img-jg5MtSrM-1712773268609)]

只有系统,有方向的学习,才能在段时间内迅速提高自己的技术。

这份体系学习笔记,适应人群:
第一,学习知识比较碎片化,没有合理的学习路线与进阶方向。
第二,开发几年,不知道如何进阶更进一步,比较迷茫。
第三,到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。如果你有需要,我这里恰好有为什么,不来领取!说不定能改变你现在的状态呢!
由于文章内容比较多,篇幅不允许,部分未展示内容以截图方式展示 。

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

  • 18
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android MVVM框架搭建需要使用Java语言。MVVM框架是一种基于模型-视图-视图模型的设计模式,它可以帮助开发者更好地组织和管理Android应用程序的代码。在搭建MVVM框架时,需要使用一些常用的开源框架,如Data Binding、LiveData、ViewModel等。同时,还需要了解一些基本的Android开发知识和Java语言的基础知识。搭建MVVM框架需要一定的技术水平和经验,但是它可以提高应用程序的可维护性和可扩展性,让开发者更加高效地开发Android应用程序。 ### 回答2: 在Android开发过程中,MVVM框架已经成为了一种非常流行的设计模式,因为它能够很好地解决传统的MVC模式中存在的问题。这篇文章将着重讲解如何使用Java来构建MVVM框架。 MVVM框架主要由三个部分组成:View、ViewModel和Model。其中,View指的是用户界面;ViewModel则是View和Model之间的中间层,它包含View所需的数据和业务逻辑;而Model则是数据层,负责从数据源中获取和管理数据。 在Java中构建MVVM框架,可以使用以下几个关键技术: 1. Data Binding:Data Binding是一种新兴的技术,可以轻松地将数据绑定到用户界面上。在Android中,Data Binding库已经成为了MVVM架构建中不可少的一部分。 2. LiveData:LiveData是Jetpack组件库中的一部分,它是用于构建响应式应用程序的一种强大的工具,也是MVVM模式的关键组成部分。LiveData可以监听数据源中的更改,并在数据发生变化时通知ViewModel。 3. ViewModel:ViewModel是MVVM中的重要组成部分,主要用于保存状态、管理数据和处理业务逻辑。它允许View对Model进行观察,从而实现MVVM框架的完整性和数据驱动。 4. RxJava:RxJava是一种Reactive编程框架,可以用于处理异步事件流,并在应用程序中实现非阻塞的、响应式编程。RxJava可以与MVVM框架结合使用,使架构更加灵活和响应。 搭建MVVM框架的过程中,首先需要创建View、ViewModel和Model三个关键组件。ViewModel将负责将Model的数据更新到View上,并处理业务逻辑。此外,使用Data Binding和LiveData建立数据流,实现双向数据绑定,保持ViewModel和View的同步。 最终,使用RxJava将ViewModel和View解耦,实现响应性和灵活性。在整个MVVM框架中,使用Java构建时需要注意的重要细节包括内存泄漏问题、持久性存储问题等等,尽可能地在代码编写时去考虑这些问题,以确保框架的可靠性和稳定性。 总而言之,使用Java搭建MVVM框架需要一定的技术积累和编码能力,但这种框架在Android开发中已经被广泛应用,相信有机会成为您的一个不错的选择。 ### 回答3: MVVM是Model-View-ViewModel的缩写,是一种软件架构模式。在安卓应用开发中,我们可以利用MVVM框架搭建Java开发项目,实现数据和用户交互分离,让代码更加清晰易懂,可读性更高。 MVVM架构中,Model代表实体模型,View代表图形界面,ViewModel作为桥梁连接Model和View,负责将Model转化成View的形式,以及监听View的变化反向更新Model。 在搭建Android MVVM框架时,我们需要先定义布局文件,将View的控件和ViewModel关联。然后定义ViewModel类,在类中添加模型数据和业务逻辑。最后,在Activity或Fragment中实现ViewModel的数据绑定和监听,将数据和页面连接起来。 在Java开发中,我们可以利用一些主流的MVVM框架,例如Google官方提供的Android Architecture Components框架,它包含LiveData、ViewModel、Room和DataBinding四个组件,能够快速搭建MVVM架构,实现组件之间的数据通信和交互。 除此之外,还有Databinding框架,它可以在布局文件中直接绑定数据,省去了一些繁琐的代码,但是需要一定的学习成本。 总而言之,MVVM框架搭建Java项目是非常有利于提高代码可维护性和可读性,通过桥梁连接View与Model,让开发更加高效。不同的情况需要使用不同的框架,开发者可以根据自己的需求进行选择。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值