- 浏览: 186833 次
- 性别:
- 来自: 浙江
-
文章分类
最新评论
本文参考至:http://www.eoeandroid.com/thread-321547-1-1.html
以前的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的定义
}
现在可以试着用这种方式:
public class ViewHolder {
// I added a generic return type to reduce the casting noise in client code
@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一般的写法是:
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的定义
}
现在可以试着用这种方式:
public class ViewHolder {
// I added a generic return type to reduce the casting noise in client code
@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;
}
发表评论
-
关于Android的webSocket的简单使用
2017-05-12 14:34 1013使用第三方jar: autobahn-0.5.0.jar 连 ... -
Comparator自定义排序的使用
2017-05-11 14:18 770java对于集合的自定义排序方法有: Arrays.sort ... -
查看Android虚拟机文件相关命令
2017-05-02 14:12 637我们在虚拟机下添加文件后,想查看下文件是否正确创建,可在win ... -
android6.0创建文件问题
2017-05-02 12:58 600Android在6.0有了动态权限管理,在文件创建时就需要动态 ... -
xutils的http模块的简单使用
2017-04-28 16:05 546先导入xutils相关依赖: compile 'org.xut ... -
Litepal的简单使用
2017-04-27 17:21 664相关包下载地址:https://github.com/Lite ... -
Android下拉刷新上拉加载控件的使用
2017-04-21 10:46 874参考链接:http://www.jianshu.com/p/6 ... -
图片加载框架
2017-04-19 16:29 414图片加载框架: picasso ImageLoader -
Android的Service总结
2017-04-17 15:46 482参考链接:http://www.cnblogs.com/lwb ... -
解决ViewPager的addOnPageChangeListener不加载第一个的问题
2017-03-18 17:53 2680今天在使用ViewPager的时候发现个问题。 需求如下: ... -
clone方法的使用
2017-01-04 10:14 569由于Java有引用这一说,当两个变量指向同一块内存时,改变 ... -
Fragment无法切换问题
2016-12-16 14:57 2131Android有一个回收机制,当内存不足时,会自动回收相关内存 ... -
关于Material Design的CollapsingToolbarLayout初次使用
2016-12-16 13:38 627最近了解了下CollapsingToolbarLayout的使 ... -
MVP模式的学习
2016-12-10 15:15 696以前我写代码都是使用MVC模式,这种模式使Activity变得 ... -
Material Design:Android Design Support Library 介绍
2016-12-10 14:14 521参考链接 : https://blog.leancloud.c ... -
SpannableString简介
2016-12-10 14:03 443参考链接: http://www.cnblogs.com/ji ... -
getResources().getDrawable方法的废弃
2016-12-10 13:20 1257参考链接:http://www.jianshu.com/p/e ... -
关于AndroidStudio的Unsupported major.minor version 52.0异常
2016-12-10 13:15 2389参考链接:http://blog.csdn.net/fakin ... -
Android记录
2015-06-01 10:54 668http://tools.android-studio.org ... -
android自定义控件相关使用
2015-04-24 16:53 625用代码简单介绍下自定义控件的使用: 先看主activity: ...
相关推荐
本示例探讨的是如何实现Android ViewHolder的超简洁写法,无需为每个Adapter创建单独的ViewHolder类。 ViewHolder模式的核心思想是减少findViewById的调用,提高列表滚动时的性能。通常情况下,我们会在Adapter的...
本篇将详细讲解ViewHolder的超级简洁写法,以及如何通过这个设计模式优化ListView的性能。 ViewHolder模式的核心思想是减少findViewById()的调用,因为这个方法在执行时会进行大量的查找操作,消耗时间。通过复用已...
把SparseArray绑定到一个view,SparseArray 初始化会分配10长度的地址,理论上会浪费了内存,但是这些都在允许范围内。省去了重复写viewholder的重复,重复。。自己留作纪念。
在Kotlin语言的支持下,实现Recyclerview的多种item布局变得更加简洁和高效。本教程将深入探讨如何在Android项目中使用Kotlin来实现这一功能。 首先,Recyclerview的基础知识是必要的。Recyclerview通过ViewHolder...
#####2.ViewHolder的简洁写法 #######>cn.tsplaycool.notes.utils-ViewHolder #####3.获取某个应用的版本号 #######>cn.tsplaycool.notes.utils-Utils-getVersionCode #####4.判断手机号码运营商 #######>...
最后,为了更好地理解这个Kotlin demo,你需要了解Kotlin的一些特性,如类型安全的扩展函数、数据类以及它的简洁语法。Kotlin的这些特性使得代码更加清晰和易读,同时也提高了开发效率。 总的来说,这个“kotlin ...
重新定义RecyclerView Adapter的封装,追求既简单又实用,结合Kotlin的高级特性,优化代码编写方式,真正做到高内聚低取代设计图实现图适配器抽象及实现 ViewModel抽象及实现 RecyclerView动态扩展实现特色DSL写法,...
在Kotlin中封装RecyclerView的Adapter可以使代码更加简洁、易读,同时也提高了代码的复用性。本教程将介绍如何使用Kotlin来封装一个RecyclerView的Adapter。 首先,我们看到一个简单的单类型使用的例子。在这个例子...