BaseAdapter的封装
来源:互联网 发布:淘宝卖家仓库在哪里 编辑:程序博客网 时间:2024/06/10 10:22
ListView的使用,必须有一个装配数据的适配器。所以BaseAdapter的封装就显得尤为重要。
适配器的作用:将具体的集合数据装配到具体的一个item layout中
问题一:数据类型是不确定的。
问题二:item layout的布局是不确定的
问题三:将集合中指定位置的数据装配到item,是不确定的。
因为数据类型不确定,所以我们把封装类写为泛型类。
基于数据装配的优化,我们把ViewHolder封装了一个基类。
import android.content.Context;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import java.util.List;/** * 作者: willkong on 2017/11/14. * 作用:BaseAdapter的抽取 */public abstract class MyBaseAdapter3<T> extends BaseAdapter{ public List<T> list; public MyBaseAdapter3(Context context,List<T>list){ this.list = list; } @Override public int getCount() { return list==null?0:list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } //将具体的集合数据装配到具体的一个item layout中 //问题一:item layout的布局是不确定的 //问题二:将集合中指定位置的数据装配到item,是不确定的。 @Override public View getView(int position, View convertView, ViewGroup parent) { BaseHolder<T> holder; if (convertView==null){ holder = getHolder(); }else { holder = (BaseHolder<T>) convertView.getTag(); } //装配数据 T t = list.get(position); holder.setData(t); return holder.getRootView(); } protected abstract BaseHolder<T> getHolder();}
import android.content.Context;import android.view.View;import butterknife.ButterKnife;/** * 作者: willkong on 2017/11/14. * 作用:缓存器 */public abstract class BaseHolder<T> { private View rootView; private T data; public BaseHolder(Context context){ rootView = initView(context); rootView.setTag(this); ButterKnife.bind(this,rootView); } //提供item的布局 protected abstract View initView(Context context); public T getData() { return data; } public void setData(T data) { this.data = data; refreshData(); } //装配过程 protected abstract void refreshData(); public View getRootView() { return rootView; }}
使用示例:
//方式四: ProductAdapter3 productAdapter3 = new ProductAdapter3(getActivity(),productList); lvProductList.setAdapter(productAdapter3);//显示列表
import android.content.Context;import android.view.View;import android.widget.TextView;import com.willkong.p2pclient.R;import com.willkong.p2pclient.bean.Product;import com.willkong.p2pclient.ui.RoundProgress;import butterknife.Bind;/** * 作者: willkong on 2017/11/14. * 作用:xxx */public class MyHolder extends BaseHolder<Product> { @Bind(R.id.p_name) TextView pName; @Bind(R.id.p_money) TextView pMoney; @Bind(R.id.p_yearlv) TextView pYearlv; @Bind(R.id.p_suodingdays) TextView pSuodingdays; @Bind(R.id.p_minzouzi) TextView pMinzouzi; @Bind(R.id.p_minnum) TextView pMinnum; @Bind(R.id.p_progresss) RoundProgress pProgresss; public MyHolder(Context context) { super(context); } @Override protected View initView(Context context) {// return View.inflate(UIUtils.getContext(), R.layout.item_product_list, null); return View.inflate(context, R.layout.item_product_list, null); } @Override protected void refreshData() { Product product = (Product) this.getData(); pMinnum.setText(product.memberNum); pMinzouzi.setText(product.minTouMoney); pMoney.setText(product.money); pName.setText(product.name); pProgresss.setProgress(Integer.parseInt(product.progress)); pSuodingdays.setText(product.suodingDays); pYearlv.setText(product.yearRate); }}
阅读全文
0 0
- BaseAdapter的简单封装
- BaseAdapter的简单封装
- BaseAdapter的封装
- baseadapter的二次封装
- BaseAdapter的封装
- recyclerView的 BaseAdapter的封装
- Butterknife下的BaseAdapter封装。
- BaseAdapter的再次封装使用
- BaseAdapter的封装和实现
- BaseAdapter的最简单的封装
- 对BaseAdapter和ViewHolder的封装
- Android BaseAdapter的极简封装
- 多布局BaseAdapter的封装TeachMultiTypeAdapter
- BaseAdapter的封装来实现模块化开发
- 封装RecyclerView的基础适配器BaseAdapter
- 封装BaseAdapter 实现类中复用
- BaseAdapter简单封装
- 对BaseAdapter进行封装
- oracle 常用函数
- Java Serializable(序列化)的理解和总结
- 酷狗缓存文件kgtemp解密
- cannot call member function without object
- ZeroMQ指南:第3章:高级请求-应答模式
- BaseAdapter的封装
- Mysql linux安装过程
- nginx-1.8.1源码安装
- JavaScript中的字符串
- 入坑集锦(一)
- ANR 笔记
- 机器学习系列
- linux普通用户su 到root免密码
- android service的onstart()和onStartCommand()的区别