摘要:的常用操作之前在網(wǎng)上找了各種的教程都比較雜亂而且時間上也不同都是幾年前的帖子配置方法也有很大出入下面是本人親測使用的一些案例用于分享如有不對還請指正使用現(xiàn)在的時間是使用的工具版本分別是使用直接在的中配置如下代碼一步搞定簡單綁定在使用之前
Databinding的常用操作: 之前在網(wǎng)上找了各種Databinding的教程,都比較雜亂,而且時間上也不同,都是幾年前的帖子配置方法也有很大出入,下面是本人親測使用的一些案例,用于分享,如有不對,還請指正: 1.使用:
現(xiàn)在的時間是: 2017-2-4 10:35:07
使用的工具版本分別是:
AndroidStudio 2.2.3
gradle 2.2.3
使用DataBinding直接在Module的.gradle中配置如下代碼:
android { ... //一步搞定 dataBinding{ enabled = true; } }2.簡單綁定:
在使用之前需要說明的是布局文件(layout)跟以前的寫法是不同的畢竟要綁定數(shù)據(jù)嘛:
1.在原來的根布局外面要套一層 layout 并且在里面使用來進行變量的聲明:
這里我們聲明了一個user變量,名叫"user",他的type指向的就是User這個Bean文件如下:
public class User { private String firstName; private String lastName; public User() { } @Override public String toString() { return "User{" + "firstName="" + firstName + """ + ", lastName="" + lastName + """ + "}"; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public User(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } }
你可以使用get/set方法,也可以直接聲明構(gòu)造方法,靜態(tài)變量~!
然后在Activity中使用:@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityMainBinding mainActivityBinding = DataBindingUtil.setContentView(this, R.layout.activity_main); User user = new User("古", "樹"); mainActivityBinding.setUser(user); }
這里 setContentView()的老式方式進行了改變使用DataBindingUtil.setContentView()他會返回一個特殊的類這個類的名字是根據(jù)你的布局文件名字來生成的,例如:
activity_main.xml 對應的就是 ActivityMainBinding; 去掉下劃線,單詞首字母大寫,以"Binding"為后綴!
這樣對應的控件上面就會顯示對應的數(shù)據(jù),這里就補貼圖了.大家可以自己嘗試!
3.ListView和Adapter: 3.1 布局文件:很簡單就是一個Listview,注意他的變量聲明
3.2 item的布局:
也很簡單就是兩個TextView,同樣注意他們的變量聲明
3.3 Adapter的定義:
可以看到這里完全不需要使用ViewHolder了.
構(gòu)造方法中的接受參數(shù)分別是:數(shù)據(jù)類型,listView的布局ID,以及,item中定義的對象Id.
public class MyAdapter3.4 setAdapterextends BaseAdapter { private List data; private int itemLayoutId; private int variableId; public MyAdapter(List data, int itemLayoutId, int variableId) { this.data = data; this.itemLayoutId = itemLayoutId; this.variableId = variableId; } @Override public int getCount() { return data.size(); } @Override public T getItem(int position) { return data.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewDataBinding binding; if (convertView == null) { binding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), itemLayoutId, parent, false); } else { binding = DataBindingUtil.getBinding(convertView); } binding.setVariable(variableId, data.get(position)); return binding.getRoot(); } }
Listusers = new ArrayList<>(); for (int i = 0; i < 100; i++) { User user; if (i % 2 == 0) { user = new User("L---" + i, null); } else { user = new User("L---" + i, "xw"); } users.add(user); } adapter = new MyAdapter<>(users, R.layout.item, BR.UserBean); secondBinding.setAdapter(adapter);
這里做個小彩蛋, 偶數(shù)的LastName直接設置為null,在item的布局中做了小處理,可以看上面,他的三元運算是有些區(qū)別的. 詳細可以查看.
另外我是直接調(diào)用的secondBinding.setAdapter(adapter); 并沒有調(diào)用secondBinding.lv.setAdapter(adapter)
因為在布局中聲明了下面的變量:
4.注意事項:
在layout中使用的三元運算符 有兩種書寫方式:
android:text="@{UserBean.lastName??`數(shù)據(jù)為空`}" android:text="@{UserBean.lastName==null ? `數(shù)據(jù)為空`: UserBean.lastName}"
,并且 如果涉及到字符串中還有字符串應當使用 ` 來區(qū)分
5.其特點:由于春節(jié)期間玩的忘了型,現(xiàn)在想起來幾個優(yōu)點:
一個項目基本一個adapter就可以搞定列表了,只是item的布局不同而已傳入構(gòu)造方法就行.
在子線程中可以操作布局,大家可以自己試試,新開條線程,去修改view.
不用再去findviewbyid了, 直接使用 生成的類.viewid就行``
目前就是用過這么多,在群里問了些大神,對listview都沒有過多的研究綁定數(shù)據(jù).我也是各種google才弄得有些眉目, 如有不對還請指正.希望能幫到大家.
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/66588.html
閱讀 3064·2021-10-12 10:20
閱讀 2809·2021-09-27 13:56
閱讀 790·2021-09-27 13:36
閱讀 1424·2021-09-26 09:46
閱讀 2417·2019-08-30 14:02
閱讀 2685·2019-08-28 18:14
閱讀 1258·2019-08-26 10:32
閱讀 1700·2019-08-23 18:25