使用步骤:

1、在build.gradle添加如下:

  android {      dataBinding {          enabled = true      }      ...........

2、我为Activity和Fragment分别写了一个Base

BaseActivity.java

//注意BaseActivity的泛型public abstract class BaseActivity extends FragmentActivity implements View.OnClickListener {protected SV bindingView;//相当于findViewById();protected  T getView(int id) {    return (T) findViewById(id);}@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    bindView();       initViews();}//实例化BindingViewprotected void bindView() {    bindingView = DataBindingUtil.setContentView(this, getLayoutResId());}//得到布局protected abstract int getLayoutResId();//实例化public abstract void initViews();public abstract void processClick(View v);public void onClick(View v) {    processClick(v);}

}

BaseFragment.java

public abstract class BaseFragment extends Fragment implements View.OnClickListener {protected SV bindingView;private View view;@Overridepublic void onCreate(@Nullable Bundle savedInstanceState) {    super.onCreate(savedInstanceState);}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {    view = getActivity().getLayoutInflater().inflate(setContent(), container, false);    bindingView = DataBindingUtil.bind(view);    initView();    setData();    return view;}protected  T getView(int id) {    return (T) view.findViewById(id);}/** * 布局 */public abstract int setContent();/** * 初始化布局 */public abstract void initView();public abstract void setData();public abstract void processClick(View v);@Overridepublic void onClick(View v) {    processClick(v);}

}

4、具体代码 ,请求接口展示数据(Activity为例)

1>.根据请求数据写实体类,我的如下:
接口有点操蛋,实体类将就着看

 public class WatingModel {    private String id;    private String doctor_name;    private String patient;    private String department_name;    private String department_area;    private String wait;    private String nowid;    private String nowtime;     private String go_time;    public String getStatus() {        return status;    }    public void setStatus(String status) {        this.status = status;    }    private String status;    public String getNowtime() {        return nowtime;    }    public void setNowtime(String nowtime) {        this.nowtime = nowtime;    }    public String getId() {        return id;    }    public void setId(String id) {        this.id = id;    }    public String getDoctor_name() {        return doctor_name;    }    public void setDoctor_name(String doctor_name) {        this.doctor_name = doctor_name;    }    public String getPatient() {        return patient;    }    public void setPatient(String patient) {        this.patient = patient;    }    public String getDepartment_name() {        return department_name;    }    public void setDepartment_name(String department_name) {        this.department_name = department_name;    }    public String getDepartment_area() {        return department_area;    }    public void setDepartment_area(String department_area) {        this.department_area = department_area;    }    public String getWait() {        return wait;    }    public void setWait(String wait) {        this.wait = wait;    }    public String getNowid() {        return nowid;    }    public void setNowid(String nowid) {        this.nowid = nowid;    }    public String getGo_time() {        return go_time;    }    public void setGo_time(String go_time) {        this.go_time = go_time;    }

}

2、布局

几点注意的地方:

1>最外层的布局用
2>数据源
3>里面有来个属性,name是你在代码中实体类的对象 type是你的实体类,包名加类名
4>赋值:在控件的text属性中直接赋值:eg. android:text=”@{model.department_name}” 书写时会有提示

                                                                                                                                                                                                                                                                                                                                                                                                                                                                        


3、代码中操作:


public class WaitingDetailsActivity extends BaseActivity {//binding名字是布局名字依照驼峰命名法书写+Binding决定

private TextView title;private Dialog progressDialog;private String card_id, id;private WatingModel.Data model;//实体类@Overrideprotected int getLayoutResId() {    return R.layout.activity_waiting;//布局}@Overridepublic void initViews() {    //加载圈    progressDialog = LabelUtils.createLoadingDialog(WaitingDetailsActivity.this, "加载中...", true, 0);    card_id = getIntent().getStringExtra("card_id");    id = getIntent().getStringExtra("id");    title = getView(R.id.title);//对于引入的布局bindingView.无法直接获取其子控件;    getView(R.id.back).setOnClickListener(this);    title.setText("标题");    //bingView.可直接获取控件对象,无需fandViewById();    bindingView.refresh.setOnClickListener(this);    getData();}@Overridepublic void processClick(View v) {    switch (v.getId()) {        case R.id.back:            finish();            break;    }}Handler handler = new Handler(new Handler.Callback() {    @Override    public boolean handleMessage(Message msg) {        progressDialog.dismiss();        if (msg.what == 1) {            String result = msg.obj.toString();            try {                JSONObject json = new JSONObject(result);                String code = json.getString("code");                boolean status = json.getBoolean("status");                String info = json.getString("info");                if (status) {                    JSONArray array = json.getJSONArray("data");                    JSONObject jsonObject = array.getJSONObject(0);                    Gson gson = new Gson();                    model = gson.fromJson(jsonObject.toString(), WatingModel.Data.class);                    bindingView.setModel(model);//别忘记这句话,请求到数据后写,很重要,只有在布局中写到实体类,在代码中才有这个方法,方法名是你布局中的name;                } else {                    LabelUtils.toast(WaitingDetailsActivity.this, code + info);                }            } catch (JSONException e) {                e.printStackTrace();            }        } else if (msg.what == 3) {            LabelUtils.toast(WaitingDetailsActivity.this, getResources().getString(R.string.quest_fail));        }        return false;    }});public void getData() {    progressDialog.show();    HashMap map = new HashMap<>();    map.put("card_id", card_id + "");    map.put("member_id", LoginDataModel.getLoginData().getMember_id() + "");    OkhttpTool.getNetData("请求地址", map).enqueue(new Callback() {        @Override        public void onFailure(Call call, final IOException e) {            Message msg = new Message();            msg.what = 3;            handler.sendMessage(msg);        }        @Override        public void onResponse(Call call, Response response) throws IOException {            String result = response.body().string();            if (response.isSuccessful()) {                Message msg = new Message();                msg.what = 1;                msg.obj = result;                handler.sendMessage(msg);            } else {                Message msg = new Message();                msg.what = 3;                handler.sendMessage(msg);            }        }    });}

}

简单使用介绍到这,代码量多一些,但很简单,再此说一些我在使用的过程中遇到的一些问题

1、DataBinding 使用中,包括布局 相关东西如有错误,会集体报错 ,写的时候一定要仔细
2、layout布局与他的直接子布局属性共用,有重复的话会报错,这个问题害我整了一上午的才知道,我的错误是layout加了背景 他的直接子布局也加了背景(我的项目需要),结果就冲突了,这样的布局还很多 导致整个项目瘫痪 ,报的错误仔细看最后一行,属性重复…..

更多相关文章

  1. 箭头函数的基础使用
  2. NPM 和webpack 的基础使用
  3. Python list sort方法的具体使用
  4. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  5. android一句话实现APP自动更新(带通知栏)
  6. android 中调用接口发送短信
  7. android神器Stetho调试
  8. android应用程序中使用root权限
  9. 【061】Eclipse 4 Android(安卓)使用技巧

随机推荐

  1. JNI / C for android 技术总揽
  2. eclipse无法编译android故障排除
  3. 如何提高Android用户体验
  4. Android中检测手机制式和移动网络类型
  5. Android(4)---Android(安卓)控件布局常用
  6. Android(安卓)IPC 机制,进程间通信
  7. Android中的数据存储与传输
  8. Android(安卓)Studio V3.12环境下TV开发
  9. Android(安卓)EditText/TextView使用Span
  10. Android上层启动过程的几个关键点