项目作者: vivien2012

项目描述 :
公共的列表-共用一个adapter
高级语言: Java
项目地址: git://github.com/vivien2012/CommonListActivity.git
创建时间: 2018-09-06T09:08:23Z
项目社区:https://github.com/vivien2012/CommonListActivity

开源协议:

下载


CommonListActivity

公共的列表-共用一个adapter

很多时候一些列表样式是一样,写几遍会比较麻烦,是可以共用的,这就需要写一个公共的adapter

两种方式

1.设置一种公共的类,来存放数据,不同种类的类转换成公共的类

public class CommonAdapter extends BaseAdapter {

  1. private Context mContext;
  2. private List<CommonData> mDatas = new ArrayList();
  3. public CommonAdapter(Context context, List<CommonData> datas) {
  4. mContext = context;
  5. mDatas = datas;
  6. }
  7. @Override
  8. public int getCount() {
  9. return mDatas.size();
  10. }
  11. @Override
  12. public CommonData getItem(int i) {
  13. return mDatas.get(i);
  14. }
  15. @Override
  16. public long getItemId(int i) {
  17. return i;
  18. }
  19. @Override
  20. public View getView(int i, View view, ViewGroup viewGroup) {
  21. ViewHolder viewHolder = null;
  22. if (view == null) {
  23. viewHolder = new ViewHolder();
  24. view = LayoutInflater.from(mContext).inflate(R.layout.item_common, null);
  25. viewHolder.desc = (TextView) view.findViewById(R.id.desc);
  26. view.setTag(viewHolder);
  27. } else {
  28. viewHolder = (ViewHolder) view.getTag();
  29. }
  30. CommonData data = getItem(i);
  31. viewHolder.desc.setText(data.desc);
  32. return view;
  33. }
  34. class ViewHolder {
  35. TextView desc;
  36. }

}

设置数据的时候最后都是List, 如果不是的,可以自行转换。

-----------------------------------------------

2.adpter中的具体类用泛型T来代替,具体的赋值写成抽像方法,实例化adapter的时候实现具体的操作

public abstract class CommonAdapter2 extends BaseAdapter {

  1. private Context mContext;
  2. private List<T> mDatas = new ArrayList();
  3. public CommonAdapter2(Context context, List<T> datas) {
  4. mContext = context;
  5. mDatas = datas;
  6. }
  7. @Override
  8. public int getCount() {
  9. return mDatas.size();
  10. }
  11. @Override
  12. public T getItem(int i) {
  13. return mDatas.get(i);
  14. }
  15. @Override
  16. public long getItemId(int i) {
  17. return i;
  18. }
  19. @Override
  20. public View getView(int i, View view, ViewGroup viewGroup) {
  21. ViewHolder viewHolder = null;
  22. if (view == null) {
  23. viewHolder = new ViewHolder();
  24. view = LayoutInflater.from(mContext).inflate(R.layout.item_common, null);
  25. viewHolder.desc = (TextView) view.findViewById(R.id.desc);
  26. view.setTag(viewHolder);
  27. } else {
  28. viewHolder = (ViewHolder) view.getTag();
  29. }
  30. viewHolder.desc.setText(setDesc(getItem(i)));
  31. return view;
  32. }
  33. class ViewHolder {
  34. TextView desc;
  35. }
  36. public abstract String setDesc(T data);

}

这种方式的在使用的时候可以兼容多不周的数据类

例如:

CommonAdapter2 mAdapter = new CommonAdapter2(this, getCommonDatas()) {
@Override
public String setDesc(CommonData data) {
return data.desc;
}
};

CommonAdapter2 mAdapter2 = new CommonAdapter2(this, getBookDatas()) {
@Override
public String setDesc(BookData data) {
return data.bookName;
}
};

这样即可以适用不同的类,重写抽象方法的时候即可以赋值操作。