最后
希望本文对你有所启发,有任何面试上的建议也欢迎留言分享给大家。
好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划,来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。
好了~如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。
为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!希望读到这的您能点个小赞和关注下我,以后还会更新技术干货,谢谢您的支持!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事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并进行绑定
第二步:在布局中跟节点添加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());
- 效果如下:
支持的运算符:
-
数学运算符: + - / * %
-
字符串拼接: +
-
逻辑运算符: && ||
-
二进制: & | ^
-
一元运算符: +
-
位运算符: >> >>> <<
-
比较: == > < >= <=
-
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布局
在布局中跟节点添加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布局
在布局中跟节点添加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();
- 将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是为了解决一个数据类中不需要所有的数据都进行监听时代替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构建图片加载方法
/**
- 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构建图片加载方法
/**
- Created by Administrator on 2018/5/30 0030.
*/
public class ImageUtil {
新的开始
改变人生,没有什么捷径可言,这条路需要自己亲自去走一走,只有深入思考,不断反思总结,保持学习的热情,一步一步构建自己完整的知识体系,才是最终的制胜之道,也是程序员应该承担的使命。
《系列学习视频》
[外链图片转存中…(img-UD9GiHvf-1715665035280)]
《系列学习文档》
[外链图片转存中…(img-cC8YmuPa-1715665035280)]
《我的大厂面试之旅》
[外链图片转存中…(img-WcxOyIZ4-1715665035281)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!