ListView的理解
来源:互联网 发布:mac多个桌面切换 编辑:程序博客网 时间:2024/05/21 12:01
ListView 的理解
E:\AndroidStudioProjects\ListViewSimpleTest
1.列表显示需要三个元素:
1.ListView 用来显示列表的View
2.适配器Adapter
ArrayAdapter:最简单,只能显示一行字
public ArrayAdapter(Context context,int textViewResourceId,List<T> objects);
参数:this,item的layout,数据源;
SimpleAdapter:最好扩充,可以自定义出各种效果
public SimpleAdapter (Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)
参数:this,数据源,item的layout,
from:一个将被添加到Map映射上的键民;
to:将绑定数据的试图ID
SimpleCursorAdapter:可以将数据库的列以列表形式展现
2.关于自定义Adapter
1.自定义的aAdapter
如果继承BaseAdapter,必须重写getCount、getView方法。
继承ArrayAdapter<T>,局限于只能是一种类型,构造方法ArrayAdapter<T>(Context context, int resource, List<?> objects)
context:上下文对象
resource:ListView item的布局文件
List<?> :数据源
以此类推
2.重写getView方法:(性能高)
/**
* 每个item显示出来必须调用的方法
*
* 使用缓存机制,性能高 ,
* 如果布局已缓存,使用缓存的布局 convertView,如果没有缓存,则加载
*
* @param position
* @param convertView
* @param parent
* @return
*/
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
/*获取item*/
ItemTextClass item = getItem(position);
/*new 一个view 和viewHolder*/
View view;
ViewHolder viewHolder;
/*如果 没有缓存布局*/
if(convertView==null){
/*加载布局*/
view = LayoutInflater.from(getContext()).inflate(R.layout.list_ele, null);
/*实例化viewholder*/
viewHolder = new ViewHolder();
/*存储布局中子布局的对象*/
viewHolder.img = (ImageView)view.findViewById(R.id.image);
viewHolder.big = (TextView)view.findViewById(R.id.big_text);
viewHolder.small = (TextView)view.findViewById(R.id.small_text);
viewHolder.time = (TextView)view.findViewById(R.id.time);
/*缓存到view*/
view.setTag(viewHolder);
}else {
/*如果缓存里面有布局,则直接获取该布局*/
view = convertView;
viewHolder = (ViewHolder) view.getTag();
}
/*将内容填充*/
viewHolder.img.setImageResource(item.getImage());
viewHolder.big.setText(item.getBigText());
viewHolder.small.setText(item.getSmallText());
viewHolder.time.setText(item.getTime());
return view;
}
class ViewHolder{
ImageView img;
TextView big;
TextView small;
TextView time;
}
3.viewHolder只是记录了item的子空间,减少了findViewByIde的操作,提高性能。
4.ListView的复用机制:
简单的理解就是
能看到的view 叫做activityView,把activityView放入mActivityViews数组中
不能看到的叫做scrapView,把scrapView放入mScrapViews放入数组中。
当加载下一个view的时候,先找mActivityViews有没有 -->没有找 mScrapViews 加载进来
所以说 ,当scrapView并没有马上销毁而是缓存在一个二维数组中。
E:\AndroidStudioProjects\ListViewSimpleTest
1.列表显示需要三个元素:
1.ListView 用来显示列表的View
2.适配器Adapter
ArrayAdapter:最简单,只能显示一行字
public ArrayAdapter(Context context,int textViewResourceId,List<T> objects);
参数:this,item的layout,数据源;
SimpleAdapter:最好扩充,可以自定义出各种效果
public SimpleAdapter (Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)
参数:this,数据源,item的layout,
from:一个将被添加到Map映射上的键民;
to:将绑定数据的试图ID
SimpleCursorAdapter:可以将数据库的列以列表形式展现
2.关于自定义Adapter
1.自定义的aAdapter
如果继承BaseAdapter,必须重写getCount、getView方法。
继承ArrayAdapter<T>,局限于只能是一种类型,构造方法ArrayAdapter<T>(Context context, int resource, List<?> objects)
context:上下文对象
resource:ListView item的布局文件
List<?> :数据源
以此类推
2.重写getView方法:(性能高)
/**
* 每个item显示出来必须调用的方法
*
* 使用缓存机制,性能高 ,
* 如果布局已缓存,使用缓存的布局 convertView,如果没有缓存,则加载
*
* @param position
* @param convertView
* @param parent
* @return
*/
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
/*获取item*/
ItemTextClass item = getItem(position);
/*new 一个view 和viewHolder*/
View view;
ViewHolder viewHolder;
/*如果 没有缓存布局*/
if(convertView==null){
/*加载布局*/
view = LayoutInflater.from(getContext()).inflate(R.layout.list_ele, null);
/*实例化viewholder*/
viewHolder = new ViewHolder();
/*存储布局中子布局的对象*/
viewHolder.img = (ImageView)view.findViewById(R.id.image);
viewHolder.big = (TextView)view.findViewById(R.id.big_text);
viewHolder.small = (TextView)view.findViewById(R.id.small_text);
viewHolder.time = (TextView)view.findViewById(R.id.time);
/*缓存到view*/
view.setTag(viewHolder);
}else {
/*如果缓存里面有布局,则直接获取该布局*/
view = convertView;
viewHolder = (ViewHolder) view.getTag();
}
/*将内容填充*/
viewHolder.img.setImageResource(item.getImage());
viewHolder.big.setText(item.getBigText());
viewHolder.small.setText(item.getSmallText());
viewHolder.time.setText(item.getTime());
return view;
}
class ViewHolder{
ImageView img;
TextView big;
TextView small;
TextView time;
}
3.viewHolder只是记录了item的子空间,减少了findViewByIde的操作,提高性能。
4.ListView的复用机制:
简单的理解就是
能看到的view 叫做activityView,把activityView放入mActivityViews数组中
不能看到的叫做scrapView,把scrapView放入mScrapViews放入数组中。
当加载下一个view的时候,先找mActivityViews有没有 -->没有找 mScrapViews 加载进来
所以说 ,当scrapView并没有马上销毁而是缓存在一个二维数组中。
阅读全文
0 0
- ListView的理解
- ListView的理解
- listView控件的理解
- listView 我的理解
- 对listView的理解
- ListView的简单理解
- Listview的理解①
- listview的一些理解
- ListView的理解
- 对Android ListView的理解
- 对ListView新的理解
- Android ListView BaseAdapter的理解
- Android ListView理解,BaseAdapter,ListView 的adapter用法和理解
- Android绘制listview的优化理解
- Android:对ListView原理的理解
- 关于listView的理解(转载自leesa)
- 对控件ListView的理解与使用
- 206.m1-ListView的优化理解
- Hadoop Shell命令
- iphone x 适配问题
- 如何成为一名异构并行计算工程师
- python numpy meshgrid
- 设计思想学习—策略模式
- ListView的理解
- Halcon13+vs2013环境配置
- CentOS7配置静态IP
- TCP状态深入-TCP系统设置
- 字符编码的演变
- nginx限制ip多次访问,LR报错503的原因之一
- 静态代码扫描
- 动态vps搭建代理ip
- 二维数组学习