成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

DataBinding 的Listview綁定

曹金海 / 1291人閱讀

摘要:的常用操作之前在網(wǎng)上找了各種的教程都比較雜亂而且時(shí)間上也不同都是幾年前的帖子配置方法也有很大出入下面是本人親測(cè)使用的一些案例用于分享如有不對(duì)還請(qǐng)指正使用現(xiàn)在的時(shí)間是使用的工具版本分別是使用直接在的中配置如下代碼一步搞定簡(jiǎn)單綁定在使用之前

Databinding的常用操作: 之前在網(wǎng)上找了各種Databinding的教程,都比較雜亂,而且時(shí)間上也不同,都是幾年前的帖子配置方法也有很大出入,下面是本人親測(cè)使用的一些案例,用于分享,如有不對(duì),還請(qǐng)指正: 1.使用:

現(xiàn)在的時(shí)間是: 2017-2-4 10:35:07

使用的工具版本分別是:

AndroidStudio 2.2.3

gradle 2.2.3

使用DataBinding直接在Module的.gradle中配置如下代碼:

android {
    
    ...
    //一步搞定
    dataBinding{
        enabled = true;
    }

}
2.簡(jiǎn)單綁定:

在使用之前需要說明的是布局文件(layout)跟以前的寫法是不同的畢竟要綁定數(shù)據(jù)嘛:



    
        
    

    

        

        

    

1.在原來的根布局外面要套一層 layout 并且在里面使用來進(jìn)行變量的聲明:

這里我們聲明了一個(gè)user變量,名叫"user",他的type指向的就是User這個(gè)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()的老式方式進(jìn)行了改變使用DataBindingUtil.setContentView()他會(huì)返回一個(gè)特殊的類這個(gè)類的名字是根據(jù)你的布局文件名字來生成的,例如:

activity_main.xml  對(duì)應(yīng)的就是  ActivityMainBinding;

去掉下劃線,單詞首字母大寫,以"Binding"為后綴!

這樣對(duì)應(yīng)的控件上面就會(huì)顯示對(duì)應(yīng)的數(shù)據(jù),這里就補(bǔ)貼圖了.大家可以自己嘗試!

3.ListView和Adapter: 3.1 布局文件:

很簡(jiǎn)單就是一個(gè)Listview,注意他的變量聲明





    

        
    


    

        

    
3.2 item的布局:

也很簡(jiǎn)單就是兩個(gè)TextView,同樣注意他們的變量聲明




    

        

    

    

        

        
    

3.3 Adapter的定義:

可以看到這里完全不需要使用ViewHolder了.
構(gòu)造方法中的接受參數(shù)分別是:數(shù)據(jù)類型,listView的布局ID,以及,item中定義的對(duì)象Id.

public class MyAdapter extends 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();
    }
}
3.4 setAdapter
    List users = 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);

這里做個(gè)小彩蛋, 偶數(shù)的LastName直接設(shè)置為null,在item的布局中做了小處理,可以看上面,他的三元運(yùn)算是有些區(qū)別的. 詳細(xì)可以查看.

另外我是直接調(diào)用的secondBinding.setAdapter(adapter); 并沒有調(diào)用secondBinding.lv.setAdapter(adapter)
因?yàn)樵诓季种新暶髁讼旅娴淖兞?

 

    
 
4.注意事項(xiàng):

在layout中使用的三元運(yùn)算符 有兩種書寫方式:

android:text="@{UserBean.lastName??`數(shù)據(jù)為空`}"
android:text="@{UserBean.lastName==null ? `數(shù)據(jù)為空`: UserBean.lastName}"

,并且 如果涉及到字符串中還有字符串應(yīng)當(dāng)使用 ` 來區(qū)分

5.其特點(diǎn):

由于春節(jié)期間玩的忘了型,現(xiàn)在想起來幾個(gè)優(yōu)點(diǎn):

一個(gè)項(xiàng)目基本一個(gè)adapter就可以搞定列表了,只是item的布局不同而已傳入構(gòu)造方法就行.

在子線程中可以操作布局,大家可以自己試試,新開條線程,去修改view.

不用再去findviewbyid了, 直接使用 生成的類.viewid就行``

目前就是用過這么多,在群里問了些大神,對(duì)listview都沒有過多的研究綁定數(shù)據(jù).我也是各種google才弄得有些眉目, 如有不對(duì)還請(qǐng)指正.希望能幫到大家.

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/66588.html

相關(guān)文章

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<