文档章节

viewholder 简洁写法

郑泮勇
 郑泮勇
发布于 2016/05/21 11:53
字数 416
阅读 27
收藏 4
点赞 2
评论 0

ViewHolder是什么就不解释了。
        大家通常怎么写ViewHolder呢?

ViewHolder holder = null;
        if(convertView == null){
                convertView = mInflater.inflate(R.layout.xxx null);
                holder = new ViewHolder(); 
                holder.tvXXX = (TextView)findViewById(R.id.xxx);
                //...一连串的findViewById
        }
        else{
                holder = (ViewHolder) convertView.getTag();  
        }
        
        
        
        private static class ViewHolder{
                TextView tvXXX;
                //很多view的定义
        }




      这么写一次还行,但问题是总有很多很多的ViewAdapter要这么写,每次都repeat,repeat,repeat  累啊。      所以,有这么一种简洁的写法分享给大家,先声明,从国外网站上看的,不是自己原创的,但确实很喜欢这个简洁的设计。

ViewHolder这么写(只提供一个静态方法,其实可以加一个私有构造函数防止外部实例化),代码很简单,看过就明白了

public class ViewHolder {
    @SuppressWarnings("unchecked")
    public static <T extends View> T get(View view, int id) {
        SparseArray<View> viewHolder = (SparseArray<View>) view.getTag();
        if (viewHolder == null) {
            viewHolder = new SparseArray<View>();
            view.setTag(viewHolder);
        }
        View childView = viewHolder.get(id);
        if (childView == null) {
            childView = view.findViewById(id);
            viewHolder.put(id, childView);
        }
        return (T) childView;
    }
}




在getView里这样

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

    if (convertView == null) {
        convertView = LayoutInflater.from(context)
          .inflate(R.layout.banana_phone, parent, false);
    }

    ImageView bananaView = ViewHolder.get(convertView, R.id.banana);
    TextView phoneView = ViewHolder.get(convertView, R.id.phone);

    BananaPhone bananaPhone = getItem(position);
    phoneView.setText(bananaPhone.getPhone());
    bananaView.setImageResource(bananaPhone.getBanana());

    return convertView;
}




        哈哈,完成了,果断把这个ViewHolder类加入自己的utils,一劳永逸了以后~
        值得注意的是SparseArray这个知识点,优化过的存储integer和object键值对的hashmap,网上资料很多这里就不废话了~
 

分享一个github上的开源项目小工具,更cool更简洁! 核心同样是使用SparseArray存储id+view,但更巧妙的是使用Builder模式进一步封装了常用的控件方法,进一步简化了代码~
地址是  https://github.com/JoanZapata/base-adapter-helper 
 

本文转载自:http://www.eoeandroid.com/thread-321547-1-1.html?_dsign=1c3fe6af

共有 人打赏支持
郑泮勇
粉丝 2
博文 24
码字总数 3505
作品 0
温州
程序员
ViewHolder模式超简洁写法,很cool!

ViewHolder是什么就不解释了。大家通常怎么写ViewHolder呢? ViewHolder holder = null; 这么写一次还行,但问题是总有很多很多的ViewAdapter要这么写,每次都repeat,repeat,repeat 累啊。所...

artshell
2014/09/27
0
0
Android ViewHolder简洁写法及替代findViewById方法

ViewHolder简洁写法,避免适配器中重复定义ViewHolder: import android.util.SparseArray;import android.view.View; @SuppressWarnings({"unchecked"})public class ViewFindUtils { /** *......

SRain215
2016/02/19
127
1
Android的viewHolder模式

深入浅出(这部分总结的非常好) ListView之BaseAdapter的基本使用以及ViewHolder模式。 话说开发用了各种Adapter之后感觉用的最舒服的还是BaseAdapter,尽管使用起来比其他适配器有些麻烦,...

xiaole0313
2016/08/16
0
0
ViewHolder模式超简洁写法,酷到没朋友!!!

继上一篇放大招了!基于Bmob的Android即时通讯应用源码 (一) 用到的ViewHolder viewHolder 就不解释了,懂的人都懂!!!不懂就问度娘!!! 废话不多说,进入正题!!! 大家通常怎么写V...

谁带我去看看世界
2015/05/25
0
3
DataBinding系列(三):RecyclerView中使用DataBinding

这一章,为大家带来利用Data Binding为RecyclerView填充数据。这里的难点和核心点就是RecyclerView中Adapter的实现。这里以RecyclerView多布局的情况来讲解。 1、一般情况下,我们RecyclerV...

陪你唠嗑
2017/10/12
0
0
Android ListView 使用

一.ListView点击变色 1.selector_text.xml listview——item中textview字体颜色改变 2.selector.xml listview——点击背景颜色改变 3.xml中设置 4.代码中设置 5.备注 android:state_selected...

SRain215
2016/03/16
144
0
说说ViewHolder的另一种写法

每为一个AdapterView写Adapter适配器,你是否都会创建 一个static的ViewHolder类来负责临时存储ItemView?不用回答我也已经听见了你的抱怨,那么下面为大家介绍另外一种我经常使用的写法,从...

Jack_1900
2014/07/09
0
3
安卓开发手把手教你打造万能适配器,告别繁重重复代码

大家在安卓开发过程中,经常会用到listview或者gridview,在编写代码的时候为了节约资源我们通常会采用持有者模式,即ViewHolder,如果一个工程中有多个listview,通常情况下我会写多个ViewHol...

juyao
2015/12/12
66
0
使用RecyclerView替代ListView(一)

RecyclerView是一个比ListView更灵活的一个控件,以后可以直接抛弃ListView了。具体好在哪些地方,往下看就知道了。 首先我们来使用RecyclerView来实现ListView的效果,一个滚动列表,先看下...

henry-zhang
2015/10/16
5K
0
Android控件ListView优化

这篇文章只是总结下getView里面优化视图的几种写法,就像孔乙己写茴香豆的茴字的几种写法一样,高手勿喷,勿笑,只是拿出来分享,有错误的地方欢迎大家指正,谢谢。 listview Aviewthatshow...

的书法上的
2014/05/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

利用 acme.sh 获取网站证书并配置https访问

acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书.(https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8E) 主要步骤: 安装 acme.sh 生成证书 copy 证书到 nginx/ap...

haoyuehong
9分钟前
0
0
微擎框架内如何根据media_id获取到微信图片的路径

微擎的框架内,图片选择后,获取的是那个字符串是media_id,相当于你这张图片在微信的图片服务器里面的id 要求是:获取https://mmbiz.qpic.cn/mmbiz_jpg/…… 微信图片的路径 而微信并没有根据m...

老bia同学
13分钟前
0
0
Spring boot中日期的json格式化

Model 在model层中,类的日期属性上面添加如下注解: @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd hh:mm:ss") 参考 Jackson Date格式化教程...

亚林瓜子
15分钟前
0
0
Eclipse:Failed to load the JNI shared library

1.问题背景: 由于我之前使用jdk1.9学习,当使用Luke的时候发现jdk版本过高,需要向下配置jdk,就向朋友拷了一个安装包。重新配置路径后,便开始报错。 2.问题描述: Failed to load the JNI...

tinder_boy
17分钟前
0
0
少儿学习编程课程是否真的适合七八岁的低龄儿童[图]

少儿学习编程课程是否真的适合七八岁的低龄儿童[图]: 天下熙熙皆为利来,天下攘攘皆为利往。 这几年来,乐高教育机构在国内如同雨后春笋般出现,当然关闭/转手的也很多。从教师角度来看,部...

原创小博客
23分钟前
0
0
ES12-词项查询

1.词项查询介绍 全文查询将在执行之前分析查询字符串,但词项级别查询将按照存储在倒排索引中的词项进行精确操作。这些查询通常用于数字,日期和枚举等结构化数据,而不是全文本字段。 或者,...

贾峰uk
31分钟前
0
0
http状态码与ajax的状态值

ajax状态值 1.1 200 & OK:状态请求成功

litCabbage
34分钟前
0
0
iOS动画效果合集、飞吧企鹅游戏、换肤方案、画板、文字效果等源码

iOS精选源码 动画知识运用及常见动画效果收集 3D卡片拖拽卡片叠加卡片 iFIERO - FLYING PENGUIN 飞吧企鹅SpriteKit游戏(源码) Swift封装的空数据提醒界面EmptyView 沙盒文件浏览与分享调试控...

sunnyaigd
37分钟前
0
0
AngularJS配置.run()块中设置路由事件的监听器以及过滤未经授权的请求

AngularJS中的run方法初始化全局数据,只对全局作用域起作用,如$rootScope.多个控制器之间可以共享数据,如下代码所示: <script type="text/javascript"> var m1 = angular....

孟飞阳
37分钟前
0
0
Java语言学习(十):输入/输出

Java中,I/O操作代表着输入、输出,Java所有的I/O机制都是基于数据流进行输入输出。java.io类包提供了很多的输入输出处理功能方法,大家可以参考下JDK文档中关于I/O的一些处理方法:JDK在线中...

海岸线的曙光
47分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部