在 ListView 的適配器中使用數(shù)據(jù)綁定時,有以下特別需要注意的地方:
1. DataBindingUtils.inflate ( ) 和 binding.getRoot( )
adapter 的 getView( ) 方法中,如果converView 為null 時,使用 DataBindingUtils.inflate ( ) 方法填充布局。然后 獲取binding 對應(yīng)的root的布局,作為ConvertView 的值。同時,在綁定完bean類數(shù)據(jù),返回view之前,必須加入** binding.executePendingBinding( )**方法,:

Paste_Image.png
2. BaseObservable
為了實(shí)現(xiàn)當(dāng)bean類數(shù)據(jù)發(fā)生變化時,及時通知適配器去更新視圖,需要讓bean類繼承BaseObservable ,在bean類成員變量的setXXX( )方法中加入 notifyPropertyChanged(BR.XXX); ,在getXXX( )方法上加 @Bindable 注解

Paste_Image.png
3 示例代碼:
DataBinding 在LV中使用的詳細(xì)示例可參考:https://github.com/CnPeng/MyDemosFrom2016_12 中的 a_12_GetLocalFiles_VP_FM
4 補(bǔ)充:
在實(shí)際使用的時候,出現(xiàn)了這么一個情況,Lv 下面跟著一個EditText , 在展示LV的內(nèi)容時,ET上面莫名其妙的多出了一片空白,如下圖
LV 和 ET 之間多了一片空白
然后,我嘗試著給LV 和ET分別設(shè)置背景,然后就發(fā)現(xiàn)是這片空白是被LV控制的,如下圖:
Paste_Image.png
然后,仔細(xì)排查代碼,發(fā)現(xiàn)是因?yàn)樵贏dapter中使用了數(shù)據(jù)綁定,但是在綁定bean類之后,直接就return convertView, 忘記了 binding.executePendingBindings( ) , 加入這行代碼后,一切就正常了。
Paste_Image.png


