简介
当一个页面有很多的控件的时候,我们最原始的方法就是给每个控件设置id,然后在代码里findViewById,再然后设置数据,这样的效率很低,而且整个代码看起来很不简洁。更好一点的方法是用ButterKnife等注解插件帮助我们找到控件,然后我们直接给找到的控件设置数据即可。人类的懒惰推动的着技术的发展,google为我们这些懒人推出了更为简洁的控件和数据绑定的方法—dataBinding。
databinding 是android 推出的用于控件和数据绑定的技术,已经集成到android studio里了,打开开关即可使用。
使用
1 布局文件
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="user"
type="com.example.administrator.databinngs.User"/>
</data>
<RelativeLayout
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.administrator.databinngs.MainActivity">
<TextView
android:onClick="@{user.onClick}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.name}"
/>
</RelativeLayout>
</layout>
2 代码
package com.example.administrator.databinngs;
import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import com.example.administrator.databinngs.databinding.ActivityMainBinding;
public class MainActivity extends AppCompatActivity {
private ActivityMainBinding binding;
private int total=0;
private User user=new User();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
binding.setUser(user);
updateTime();
}
private void updateTime(){
new Thread(new Runnable() {
@Override
public void run() {
long now=System.currentTimeMillis();
user.setUserName(now+"");
Message message=Message.obtain();
mHandler.sendMessage(message);
}
}).start();
}
Handler mHandler =new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
updateTime();
}
};
}
package com.example.administrator.databinngs;
import android.databinding.BaseObservable;
import android.databinding.Bindable;
/**
* Created by Administrator on 2017/4/8.
*/
public class User extends BaseObservable {
@Bindable
public String name;
public User(){
}
public User(String name){
this.name=name;
}
public void setUserName(String name){
this.name=name;
notifyPropertyChanged(BR.name);
}
}