一般来说,一个ListView的Adapter是继承自BaseAdapter,然后改写其中的getCount()、getItem()、getItemId()、getView()等方法。其中最重要的是getView()方法,其他的几个方法基本上实现的过程类似,这就提供了抽取出公共方法的可行性。

那么,至于最重要的getView()方法,可采取另一套解决方法。

下面是常规的方法,采用viewholder,根据ID找到具体view,然后再进行操作

@Override

public View getView(int arg0, View arg1, ViewGroup arg2) {

GalleryView gv = null;

if(arg1 == null) {

gv = new GalleryView();

arg1 = ViewContainer.inflate(R.layout.gallery, null);

gv.iv = (ImageView) arg1.findViewById(R.id.typeimageview);

arg1.setTag(gv);

}else {

gv = (GalleryView) arg1.getTag();

}

gv.iv.setImageResource(pic[arg0 % pic.length]);

gv.iv.setAdjustViewBounds(true);

return arg1;

}

那么先考虑把getView方法抽取出来。

通常为了节省资源,用一个ViewHolder储存View,然后对具体的View进行操作。

先编写一个ViewHolder类。(可以直接复制到项目里面用,还可以根据自己的需要来添一些代码,可参考setText等方法)

package org.out.sh.utils;

import android.content.Context;

import android.graphics.Bitmap;

import android.util.SparseArray;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.ImageView;

import android.widget.RatingBar;

import android.widget.TextView;

/**

* Created by Hao_S on 2015/4/28.

*/

public class ViewHolder {

private SparseArray mViews;

private int mPosition;

private View mConvertView;

public ViewHolder(Context context, ViewGroup parent, int layoutId, int position) {

this.mPosition = position;

this.mViews = new SparseArray();

mConvertView = LayoutInflater.from(context).inflate(layoutId, parent, false);

mConvertView.setTag(this);

}

public static ViewHolder get(Context context, View convertView, ViewGroup parent, int layoutId, int position) {

if (convertView == null) {

return new ViewHolder(context, parent, layoutId, position);

} else {

ViewHolder viewHolder = (ViewHolder) convertView.getTag();

viewHolder.mPosition = position;

return viewHolder;

}

}

public  T getView(int viewId) {

View view = mViews.get(viewId);

if(view ==null) {

view = mConvertView.findViewById(viewId);

mViews.put(viewId,view);

}

return (T) view;

}

public View getConvertView() {

return mConvertView;

}

public ViewHolder setText(int viewId, String text) {

TextView tv = getView(viewId);

tv.setText(text);

return this;

}

public ViewHolder setImageView (int viewId, int resId) {

ImageView imageView = getView(viewId);

imageView.setImageResource(resId);

return this;

}

public ViewHolder setImageView(int viewId, Bitmap bitmap) {

ImageView imageView = getView(viewId);

imageView.setImageBitmap(bitmap);

return this;

}

public ViewHolder setImageView(int viewId, String url) {

ImageView imageView = getView(viewId);

// volley

return this;

}

public ViewHolder setRatingBar(int viewId, int numStars, int rating) {

RatingBar ratingBar = getView(viewId);

ratingBar.setNumStars(numStars);

ratingBar.setRating(rating);

return this;

}

}

CommonAdapter,重点看getVIew里面的ViewHolder的使用。

package org.out.sh.utils;

import android.content.Context;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import java.util.List;

/**

* Created by NarutoSong on 2015/4/28.

*

*/

public abstract class CommonAdapter extends BaseAdapter {

protected Context context;

protected List datas;

protected LayoutInflater layoutInflater;

private int layoutId;

public CommonAdapter(Context context,int layoutId, List datas) {

this.context = context;

layoutInflater.from(context);

this.datas = datas;

this.layoutId = layoutId;

}

@Override

public int getCount() {

return datas.size();

}

@Override

public T getItem(int position) {

return datas.get(position);

}

@Override

public long getItemId(int position) {

return position;

}

@Override

public  View getView(int position, View convertView, ViewGroup parent) {

ViewHolder viewHolder = ViewHolder.get(context, convertView, parent, layoutId, position);

convert(viewHolder, getItem(position));

return viewHolder.getConvertView();

}

public abstract void convert(ViewHolder viewHolder, T t);

}

在使用的时候,继承CommonAdapter,实现convert方法。

@Override

public void convert(ViewHolder viewHolder, Code code) {

viewHolder.setText(R.id.username, code.getUsername());

}

android通用adapter,Android通用ListViewAdapter的编写。相关推荐

  1. android textview adapter,Android在FragmentPagerAdapter中的Fragment中设置TextView文本

    这个让我疯了.基本上,我想创建一个ViewPager并为其添加一些片段.然后,我想做的就是在Fragment的TextViews中设置一个值.我可以添加Fragments,并且它们会附加,但是当我在第 ...

  2. android单元测试adapter,Android 单元测试

    我在学习Android的时候最头特的就是 测试! 虚拟机慢有不舒服,真机也是觉得很慢,因为要频繁的安装应用,所以Android 单元测试的使用就显得尤为重要了. 想实现简单的单元测试不是很难,只要几步 ...

  3. Android RecyclerView设计通用Adapter

    RecylerView 的使用频率现在也算做是很高了吧?使用起来的确是挺方便的,也容易实现一些比较好看的效果 一.一般步骤 一般的设计流程都是如下所示 首先是需要一个 JavaBean 来承载数据,包 ...

  4. Android中适用于ListView、GridView等组件的通用Adapter

    今天随便逛逛CSDN,看到主页上推荐了一篇文章Android 高速开发系列 打造万能的ListView GridView 适配器,刚好这两天写项目自己也封装了相似的CommonAdapter,曾经也在 ...

  5. android开源系统brvah,Android Jetpack之通用Adapter(Databinding+BRVAH)

    之前发过一个databinding版的通用adapter,能实现一般需求,不过功能比较简陋,实际开发中大家更倾向于使用BRVAH等功能丰富的第三方框架.现在给出一个基于BRVAH的databindin ...

  6. Android 混淆机制、通用模板

    Proguard介绍 Proguard被人们熟知的是它的混淆功能,根据Proguard帮助文档的描述,Proguard可以对Java class 文件进行shrink,optimize,obfusca ...

  7. Android直播开发之旅(9):OkCamera,Android 相机应用开发通用库

    OkCamera,Android 相机应用开发通用库 转载请声明出处:http://blog.csdn.net/andrexpert/article/details/79302576 明天就可以回家过 ...

  8. android 屏幕圆角,Android通用圆角布局(兼容Android P)

    Android通用圆角布局(兼容Android P) Android通用圆角布局,可以解决Android P版本xfermode方案裁剪黑边问题和xfermode在列表view中使用滑动时EGL内存泄 ...

  9. Android网络加载通用LoadingView

    我们在进行网络加载的时候,有时候需要一个能覆盖界面的loading界面,比如第一次进应用,加载数据的时候,需要这么个loading页面,体验比较友好,再比如第一次进来,数据加载失败了,或者无网络了,需 ...

最新文章

  1. SSO(Single Sign-on) in Action
  2. 数组去重与数组扁平化
  3. 记一次使用 Lombok 翻车造成的事故!
  4. Vimium插件让键盘党像操作Vim一样操作Chrome
  5. following symbols must have non local/private scope错误问题解决方法
  6. java范例_Java范例集锦(一)
  7. 将数字转化为液晶显示屏的样子
  8. xampp mysql 查询很慢_如何开启mysql的慢查询机制
  9. php break 用法,PHP break语句
  10. 全局光照技术解析Global Illumination Explained
  11. centos怎么装python_centos下安装python的过程
  12. VSCode配置PyQt5和designer
  13. python有趣的代码-盘点10个一行强大的、有趣的Python源代码
  14. 2019交大计算机考研分数线,上海交大2019考研计算机软件与理论的复式分数..._考研_帮考网...
  15. 前中后序遍历的相互转化(附代码)
  16. 大学的第一堂必修课:军训
  17. getResource和getResourceAsStream
  18. 流利阅读12.31 The science of giving gifts your loved ones won’t want to return
  19. 苹果ipad找不到服务器怎么办,找不到网络怎么办 ipad无法加入无线网络解决方法【详解】...
  20. NLPCC2013中文微博细粒度情感识别(一)

热门文章

  1. JMP M16:64
  2. 数据结构 栈的实例应用,括号匹配
  3. 突然想 写个 接口定义 【来源于华为和海康 设备接口同步】
  4. 978. 最长湍流子数组
  5. python可以用来写什么_对于一个OIer,Python能干些什么?
  6. linux jar运行监控 mo,linux系统监控利器--monit
  7. 50欧姆线设计 高频pcb_高频电路布线的应对方法有哪些?
  8. OpenCV中神经网络的应用
  9. QList (链表) QVector (数组)
  10. VC++使用ADO开发ACCESS数据库