DataBinding绑定Listview

来源:互联网 发布:网游 mac版 编辑:程序博客网 时间:2024/06/05 07:18

listview绑定DataBinding的时候只需要变动一下布局文件和viewholder类就可以了

listview都会有一个item布局和一个item类,我们直接看这两个东西怎么用:

item布局:

item_coins_detail.java:

<layout xmlns:android="http://schemas.android.com/apk/res/android">    <data>        <import type="com.example.a96314.databindingtest.CoinsDetailBean" />        <variable            name="CoinsDetail"            type="CoinsDetailBean" />    </data>    <RelativeLayout        android:layout_width="match_parent"        android:layout_height="match_parent"        android:padding="10dp">        <TextView            android:id="@+id/coins_detail_title"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="@{CoinsDetail.detail_title}" />        <TextView            android:id="@+id/coins_detail_content"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_below="@id/coins_detail_title"            android:layout_marginTop="5dp"            android:text="@{CoinsDetail.detail_content}" />        <TextView            android:id="@+id/coins_detail_num"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignParentRight="true"            android:text="@{CoinsDetail.detail_num}" />    </RelativeLayout></layout>

还是在<data>标签里声明用到的itembean然后在textview里通过
@{}语法来赋值

然后我们看itemadtapter

DetailAdapter.java

public class DetailAdapter extends BaseAdapter {    private Context mContext;    private ArrayList<CoinsDetailBean> coins_details;    public DetailAdapter(Context mContext, ArrayList<CoinsDetailBean> coins_details) {        this.mContext = mContext;        this.coins_details = coins_details;    }    @Override    public int getCount() {        return coins_details.size();    }    @Override    public Object getItem(int position) {        return coins_details.get(position);    }    @Override    public long getItemId(int position) {        return position;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        ItemCoinsDetailBinding binding = null;        CoinsDetailViewHolder holder = null;        if (convertView == null) {            holder = new CoinsDetailViewHolder();      //获取item布局的binding            binding = DataBindingUtil.inflate(LayoutInflater.from(mContext),                    R.layout.item_coins_detail, parent, false);           //获取布局            convertView = binding.getRoot();            //缓存binding到holder            holder.setItemCoinsDetailBinding(binding);            //设置Tag            convertView.setTag(holder);        } else {            holder = (CoinsDetailViewHolder) convertView.getTag();            binding = (ItemCoinsDetailBinding) holder.getItemCoinsDetailBinding();        }        //通过binding设置当前的item对象,然后它就会自动给textview赋值        binding.setCoinsDetail(coins_details.get(position));        return convertView;    }//viewholder类里只有一个binding对象和它的get,set方法    private class CoinsDetailViewHolder {        private ViewDataBinding itemCoinsDetailBinding;        public void setItemCoinsDetailBinding(ViewDataBinding itemCoinsDetailBinding) {            this.itemCoinsDetailBinding = itemCoinsDetailBinding;        }        public ViewDataBinding getItemCoinsDetailBinding() {            return itemCoinsDetailBinding;        }    }}

代码里注释的很详细了,大家只要看一下就会明白databinding绑定listview了。

代码下载:
http://dl.download.csdn.net/down11/20160815/f8f17155f39cc7cdb9f7dcad96d0315b.zip?response-content-disposition=attachment%3Bfilename%3D%22DataBindingTest-listview.zip%22&OSSAccessKeyId=9q6nvzoJGowBj4q1&Expires=1471234967&Signature=77A4cjRK1pZemwx%2FWVumu%2BUYeKA%3D

0 0
原创粉丝点击