封装 ViewHolder

简单分析ViewHolder封装。ViewHolder内部正常是保存每个页面控件的索引,那么封装时候我们可以使用容器把每个Item布局中的所有控件存储到这个容器里面,每次使用时候从容易查询.这里用Map可以实现。也可以使用SparseArray替换,SparseArray比Map效率更高。

/**

* 封装ViewHolder工具类

* @author IsCoding

*/

public class ViewHolder {

private final HashMap mViews;

private View mConvertView;

public ViewHolder(Context context, ViewGroup parent, int layoutId,

int position) {

this.mViews = new HashMap();

mViews.clear();

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);

}

return (ViewHolder) convertView.getTag();

}

public T getView(int viewId) {

View view = mViews.get(viewId);

if (view == null) {

view = mConvertView.findViewById(viewId);

下面看一下使用封装后的ViewHolder的效果

package com.iscoding.mobile.adaptertest.test2.adapter;

import java.util.List;

import com.iscoding.mobile.adaptertest.R;

import com.iscoding.mobile.adaptertest.test2.ViewHolder;

import android.content.Context;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.TextView;

public class MyAdapter2 extends BaseAdapter {

private LayoutInflater mInflater;

private Context mContext;

private List mDatas;

public MyAdapter2(Context context, List mDatas) {

mInflater = LayoutInflater.from(context);

this.mContext = context;

this.mDatas = mDatas;

}

@Override

public int getCount() {

return mDatas.size();

}

@Override

public Object getItem(int position) {

return mDatas.get(position);

}

@Override

public long getItemId(int position) {

return position;

}

@Override

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

// 实例化一个viewHolder

ViewHolder viewHolder = ViewHolder.get(mContext, convertView, parent,

R.layout.item_1, position);

// 通过getView获取控件

TextView tv = viewHolder.getView(R.id.text_title);

// 使用

tv.setText(mDatas.get(position));

return viewHolder.getConvertView();

}

} 使用封装好的

ViewHolder 已经使代码看起来简洁非常多了。

android适配器封装,Android万能适配器(一)封装ViewHolder相关推荐

  1. BaseAdapter封装 实现万能适配器

    1.封装ViewHodler 1 package com.example.utils; 2 3 import android.content.Context; 4 import android.gra ...

  2. Android开发之万能适配器

    ListView.GridView等等非常多的东西都需要适配器.而如果开发一个app每一个listview都有写一个Adapter的话,那还怎么愉快的玩游戏.. 什么是ViewHolider以及的用法 ...

  3. Java泛型应用之打造Android中ListView和GridView万能适配器【CommonAdapter】--超简洁写法

    转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/52813227 [DylanAndroid的csdn博客] 在android中使 ...

  4. Android万能适配器BaseRecyclerViewAdapterHelper的简单使用

    继我们上一章的网络请求的封装中,我们在现有的项目中通过我们的万能适配器来写一个简单的Recyclerview列表 效果图 video1 首先还是同样的道理,我们需要进行一个简单的依赖添加 //recy ...

  5. android通用listview和gridview万能适配器实现的两种方式

    Listview和gridview是超级常用组件,于是乎,应该封装一下直接拿来用用而不是每次都写Adapter,这样多么的麻烦是不.虽然国内外大牛都有封装过,但是我总结了两个封装好的Adapter分享 ...

  6. Android进阶笔记09:Android 万能适配器

    1. Android 万能适配器      项目中Listview GridView几乎是必用的组件,Android也提供一套机制,为这些控件绑定数据,那就是Adapter.用起来虽然还不错,但每次都 ...

  7. Android BaseQuickAdapter万能适配器

    RecycleView万能适配器 一导入 implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.24' implem ...

  8. Android 万能适配器BaseQuickAdapter操作及免费源码

    Android 万能适配器BaseQuickAdapter操作及免费源码,本篇巨长无比,非常详细的介绍了BaseQuickAdapter,若有帮助到您,记得点个赞哦~ 简介 导入依赖 简单使用 添加头 ...

  9. Android之万能适配器Adapter的使用

    万能适配器 万能适配器共有两个部分:SuperViewHolder 和 SuperBaseAdapter 万能的ViewHolder public class SuperViewHolder {pri ...

  10. Android万能适配器BaseListAdapter

    我们在写列表的时候都要用到适配器Adapter,如果每一个列表都去创建一个Adapter以及相应的ViewHolder,则重复代码太多,效率低下,为了改变这种情况,我们需要做到尽可能多的复用Adapt ...

最新文章

  1. 久未更 ~ 一之 —— 关于ToolBar
  2. 负载均衡的几种常用方案
  3. vue pc端 商品轮播图_轮播图高点击商品图
  4. 技巧:设置程序默认安装到D盘
  5. 【Qt开发】V4L2 API详解 Buffer的准备和数据读取
  6. 在Ubuntu Linux中获取上次访问的文件时间
  7. Java常见面试知识点:继承、接口、多态、代码块
  8. Gradle学习之使用java plugin
  9. Python模块_re正则表达式模块-2
  10. ORM框架之Mybatis(五)mybatis生成器配置文件说明以及生成的类的说明
  11. 前端简单h5播放器的制作
  12. 小程序开发中遇到的坑
  13. JS逆向---获取某知名外卖平台数据(_token)
  14. npp++常用的匹配正则表达式
  15. prometheus + cadvisor + grafana 监控容器和服务器
  16. 转专业申请加拿大计算机硕士,GPA低?教你如何成功申请加拿大硕士!
  17. android webview静态方法,在android webview中加载静态页面
  18. 【OGNL表达式struts2标签“%,#,$”】
  19. 八字易经算法之用JAVA实现生旺死绝和十神
  20. java8中的流(Stream)

热门文章

  1. linux下安装xz命令
  2. excel-从excel导入数据到数据库
  3. Spring Cloud OpenFeign 接口反序列化失效,该怎么解决?
  4. 利用反射做一个简易 Spring IOC 容器,模仿其装配功能
  5. php 发送图片,利用PHP输入流发送图片
  6. leetcode题解41-缺失的第一个正数原来如此简单
  7. Java 内存模型(零)
  8. Ubuntu 16.04 Steam
  9. [原] Android 自定义View 密码框 例子
  10. 连上Internet-linux鸟哥的私房菜服务器篇04(阅读笔记)