请选择 进入手机版 | 继续访问电脑版
本站特色:极好的技术研究氛围!所有技术交流,必有回复!

疯狂Java联盟

 找回密码
 加入联盟
查看: 630|回复: 0

[Android] 自己开发的Android的通用适配器,带适配器优化

[复制链接]
发表于 2017-12-4 21:22:18 | 显示全部楼层 |阅读模式
一,通用适配器的代码如下
  1. package org.fkjava.shopping.adapter.common;

  2. import android.content.Context;
  3. import android.view.LayoutInflater;
  4. import android.view.View;
  5. import android.view.ViewGroup;
  6. import android.widget.BaseAdapter;
  7. import java.util.List;
  8. /**
  9. * Created by dlei on 2016/10/16.
  10. */
  11. public abstract class CommonAdapter<E> extends BaseAdapter {
  12. private List<E> datas ;
  13. private Context context ;
  14. private LayoutInflater inflater;
  15. private int resId ; // item资源

  16. public CommonAdapter(List<E> datas,int resId,Context context){
  17. this.context = context;
  18. this.resId = resId;
  19. this.datas = datas;
  20. inflater = LayoutInflater.from(context);
  21. }

  22. @Override
  23. public int getCount() {
  24. return datas.size();
  25. }

  26. @Override
  27. public Object getItem(int position) {
  28. return datas.get(position);
  29. }

  30. @Override
  31. public long getItemId(int position) {
  32. return position;
  33. }

  34. @Override
  35. public View getView(int position, View convertView, ViewGroup parent) {
  36. if(convertView == null){
  37. convertView = inflater.inflate(resId,null);
  38. ViewHolder viewHolder = new ViewHolder(convertView);
  39. convertView.setTag(viewHolder);
  40. }

  41. E data = datas.get(position);

  42. ViewHolder viewHolder = (ViewHolder) convertView.getTag();
  43. // 注入数据 子类去做 模板不知道数据应该怎么注入交给子类去注入
  44. setData(data,viewHolder,context);

  45. return convertView;
  46. }

  47. // 指定模板方法 子类来实现自己的数据注入
  48. public abstract void setData(E data, ViewHolder viewHolder,Context context);

  49. }




复制代码
  1. package org.fkjava.shopping.adapter.common;

  2. import android.view.View;

  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;

  7. /**
  8. * Created by apple on 2016/10/16.
  9. */
  10. public class ViewHolder {
  11. // 存item中的所有控件
  12. public Map<Integer,View> views = new HashMap<>();

  13. private View item ;

  14. public ViewHolder(View convertView) {
  15. item = convertView;
  16. }

  17. public <T> T findViewById(int viewId){
  18. View v = views.get(viewId);
  19. if(v !=null){
  20. return (T)v;
  21. }else{
  22. v = item.findViewById(viewId);
  23. views.put(viewId,v);
  24. return (T)v ;
  25. }
  26. }
  27. }




复制代码
开发只需要自定义的适配器继承CommonAdapter类,然后重写setData方法注入控件对应的数据即可。

您需要登录后才可以回帖 登录 | 加入联盟

本版积分规则

视频、代码、电子书下载
请关注"疯狂图书"公众号
QQ交流1群: 545923995  未满
微信群请扫二维码
QQ交流1群:
545923995
(未满)

小黑屋|手机版|Archiver|疯狂Java联盟 ( 粤ICP备11094030号 )

GMT+8, 2019-5-22 17:11 , Processed in 0.271929 second(s), 6 queries , File On.

快速回复 返回顶部 返回列表