BaseAdapter的封装
2017-11-15 10:19
399 查看
ListView的使用,必须有一个装配数据的适配器。所以BaseAdapter的封装就显得尤为重要。
适配器的作用:将具体的集合数据装配到具体的一个item layout中
问题一:数据类型是不确定的。
问题二:item layout的布局是不确定的
问题三:将集合中指定位置的数据装配到item,是不确定的。
因为数据类型不确定,所以我们把封装类写为泛型类。
基于数据装配的优化,我们把ViewHolder封装了一个基类。
使用示例:
适配器的作用:将具体的集合数据装配到具体的一个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); } }
相关文章推荐
- YCBaseAdapter封装控件
- BaseAdapter的简单封装
- 适配器模式 对 BaseAdapter 抽取封装,减少代码冗余。
- Android 之BaseRecyclerAdapter简单封装之路
- Android 完美对BaseAdapter进行二次封装
- BaseAdapter的封装来实现模块化开发
- 对BaseAdapter的进一步封装,使得BaseAdapter用起来更方便
- Android进阶之路 - 封装完善的BaseAdapter之BaseQuickAdapter
- BaseAdapter的最简单的封装
- 封装RecyclerView的基础适配器BaseAdapter
- 重新封装BaseAdapter,打造最简洁框架
- 多布局BaseAdapter的封装TeachMultiTypeAdapter
- 对BaseAdapter和ViewHolder的封装
- BaseRecycleViewAdapter的封装,基于多种bean数据源的呈现
- Android BaseAdapter的极简封装
- 为了灵活使用listView,封装了BaseAdapter
- 对BaseAdapter进行封装
- 12,对ListView的适配器的封装BaseListAdapter
- 自定义封装了ViewHolder的BaseAdapter,简化了Adapter的编写
- 116.黑名单设置的优化(封装BaseAdapter的方法)