①布局文件添加listview空降
②准备数据源:适配器不同;数组,xml,对象集合,数据库
③创建适配器
④加载到listview组件
事件:点击滚动事件
研究ArrayAdapter:使用自定义布局文件
1.创建类对象
2.从写ArrayAdapter父类 getView();
3.创建适配器
SimpleAdapter使用:
1.创建自定义布局文件
2.创建适配器

ListView常用属性
1.android:divider=”” 列表之间绘制的颜色或者图片。一般开发中用于分隔表项。在实际开发过程中,如果你不想要列表之间的分割线,可以设置属性为 @null
2. android:dividerHeight=”” 前面 divider 的高度。
3. android:stackFromBottom=”” 使它们的内容从底部开始显示。默认是 false 从顶部开始显示,如果设置为 true 则从底部开始显示。
4. android:transcriptMode=”” 设置列表的 transcriptMode 模式,该模式指定列表添加新的选项的时候,是否自动滑动到底部,显示新的选项。
共三个枚举值:
disabled:取消 transcriptMode 模式,默认的 。
normal:当接受到数据集合改变的通知,并且仅仅当最后一个选项已经完全显示在屏幕的时候,自动滑动到底部。
alwaysScroll:无论当前列表显示什么选项,列表将会自动滑动到底部显示最新的选项。
13.2ListView常用方法
setEmptyView(View)设置ListView没有数据时展示的布局
需要注意。该方法需要的参数 View。该 View 必须和 ListView 在同一个布局容器中。
setHeaderView()添加头部布局,可以添加多个(需要动态加载布局)
setFooterView()添加尾部布局,可以添加多个(需要动态加载布局)
13.3适配器
Android 中适配器是连接后端数据和前端显示的接口,是数据和UI之间重要的纽带,主要在 View 上显示【一般是 listview】。可以看作是界面数据绑定的一种理解。它所操纵的数据一般都是一些比较复杂的数据,如数组,链表,数据库,集合等。适配器就像显示器,把复杂的东西按人可以接受的方式来展现。
高级控件:ListView、GridView[网格视图]、Spinner[下拉列表]、Gallery[画廊]、ViewPage 等都需要使用适配器来为其设置数据源。
常用的适配器有:ArrayAdapter,SimpleAdapter,CursorAdapter 这三个都是继承 BaseAdapter,BaseAdapter是一个抽象类,需要子类继承并实现其中的方法才能使用,常用于用户自定义适配器时,显示比较复杂的数据。
ListView的ConvertView复用
1.重用了convertView,很大程度上的减少了内存的消耗。通过判断convertView是否为null,是的话就需要产生一个View出来,然后给这个视图数据,最后将这个视图返回给底层,呈献给用户。
2.ViewHolder 为static,也就是静态的,静态类只会在第一次加载时 会耗费比较长时间,但是后面就可以很好帮助加载,同时保证了内存中只有一个ViewHolder,节省了内存的开销
3.给contentView设置tag(setTag()),传入一个viewHolder对象,用于缓存要显示的数据
4.图片采用异步加载方式
5.如果listview需要显示的item很多,就要考虑分页加载。比如一共要显示100条或者更多的时候,我们可以考虑先加载20条,等用户拉到列表底部的时候再去 加载接下来的20条
6.尽量避免在ListView适配器中使用线程,因为线程是产生内存泄露的主要原因在于线程生命周期的不可控制
7.ListView布局的layout_height尽量使用march_parent防止用户误操作屏幕导致重复调用getview方法

@Override
public View getView(int position, View convertView, ViewGroup parent) {
View layout = null;
if (convertView == null) {
layout = getLayoutInflater().inflate(R.layout.activity_main, parent, false);
//在这里去 findViewById 以及更新UI
}else{//如果 convertView 不等于 null 了。则不需要再去加载一次布局
layout = convertView;
//在这里去 findViewById 以及更新UI
}
return layout;
}
例:
MainActivity
public class MainActivity extends AppCompatActivity {
private ListView lv_show;
private ArrayList<Student> data;private int images[] = {R.mipmap.icon0, R.mipmap.icon1,R.mipmap.icon2, R.mipmap.icon3, R.mipmap.icon4,R.mipmap.icon5, R.mipmap.icon6, R.mipmap.icon7,R.mipmap.icon8, R.mipmap.icon9, R.mipmap.icon10, R.mipmap.icon11};@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);lv_show = (ListView) findViewById(R.id.lv_show);initData();MyAdapter myAdapter = new MyAdapter(this, data);lv_show.setAdapter(myAdapter);lv_show.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {Toast.makeText(MainActivity.this,"id="+id,Toast.LENGTH_SHORT).show();}});
}//初始化数据
private void initData() {data = new ArrayList<>();for (int i = 0; i < images.length; i++) {long l = System.currentTimeMillis();data.add(new Student(images[i], "标题" + i, "最后一条消息" + i, l - i * 10000));}
}   }

Listview卡顿的解决思路
1、使用Adapter提供的convertView 进行复用ItemView
2、使用ViewHolder 减少 findviewbyid 调用次数
3、 Listview 被多层嵌套,多次的onMessure导致卡顿,需要减少嵌套的层数
4、如果多层嵌套无法避免,建议把Listview的高和宽设置为 match_parent
5、使用分页,减少每次ListView加载的数据
6、如果显示图片,可以对图片进行缓存,减少加载的
7、减少不必要的视图更新

ListView适配器相关推荐

  1. android listview 切换,Android:在ListView适配器中切换OnCheckedChangeListener

    我在我的应用程序中有一个listView.对于listView中的每个元素,它都有一个Switch.以前我在listView Adapter的getView方法中为Switch实现了一个onClick ...

  2. ListView与ListView适配器

    Android ListView ListView是Android 中使用非常广泛的一种组件,它一垂直列表的 形式显示信息,使用来显示我们常见的列表形式,继承抽象类AdpterView ListVie ...

  3. 13、ListView 适配器

    13.1ListView常用属性 1.android:divider="" 列表之间绘制的颜色或者图片.一般开发中用于分隔表项.在实际开发过程中,如果你不想要列表之间的分割线,可以 ...

  4. Android开发之适配器-ListView适配器的重复数据

    适配器是Android中的数据与View视图的桥梁,作用就是将数据通过适配器显示到对应的View视图上. 工作中,在用ListView做适配器数据时候,有些人肯定碰见过,如何优化效率,但是又出现重复数 ...

  5. 代码优化Android ListView适配器三级优化详解

    转载本专栏每一篇博客请注明转载出处地址,尊重原创.此博客转载链接地址:点击打开链接  http://blog.csdn.net/qq_32059827/article/details/52718489 ...

  6. android listview适配器使用,android – 使用适配器在Listview中填充Listview

    我有一个片段.这个片段在他的onCreateView方法上加载的视图有一个ListView(A)(填充在Adapter(A)中).但是,这个ListView(A)里面有另一个ListView(B).所 ...

  7. Android ListView适配器

    目录 ListView简介: ListView简单用法: ArrayAdapter数组适配器: SimpleAdapter简单适配器: BaseAdapter自定义适配器: ListView简介: 在 ...

  8. ListView基本用法及适配器介绍

    ListView基本用法 ListView常用属性 1.android:divider="" 列表之间绘制的颜色或者图片.一般开发中用于分隔表项.在实际开发过程中,如果你不想要列表 ...

  9. [Android]ListView性能优化之视图缓存

    前言 ListView是Android中最常用的控件,通过适配器来进行数据适配然后显示出来,而其性能是个很值得研究的话题.本文与你一起探讨Google I/O提供的优化Adapter方案,欢迎大家交流 ...

  10. ListView的高级使用

    ListView在android开放中用的比较多,所以接下来就进行ListView的使用的讲解. 首先创建一个android项目,项目名为ListViewTest. ListView的简单使用 修改布 ...

最新文章

  1. Java笔试面试总结—try、catch、finally语句中有return 的各类情况
  2. 复杂科学2021年度精选:从诺贝尔奖到未来科学
  3. linux下安装QQ
  4. 【LeetCode】LeetCode之跳跃游戏——动态规划+贪心算法
  5. memset和fill
  6. 测试管理工具QC第一篇-QC安装步骤(史上最详细的图解过程)-第一篇
  7. 六个国外免费的DNS服务-做英文与外贸必备
  8. MicroMsg.SDK.WXMediaMessage: checkArgs fail, thumbData is invalid
  9. 旧电脑装什么系统最快_旧电脑装什么系统好_老旧电脑适合装什么操作系统
  10. bex5 php,BeX5企业微信集成
  11. SQL查询结果根据汉字拼音排序
  12. 《那些年啊,那些事——一个程序员的奋斗史》——113
  13. 绑架、做空、造假…是谁搞垮了曾经的“网红公司”网秦?
  14. 详解p=q->next和p->next=q的区别,附代码
  15. python读取csv文件表头_Python读取CSV文件
  16. python批量检索文献_快解锁新姿势,教你如何用Python搞定文献搜索和科研图片!...
  17. Springboot实战项目---从需求分析到项目部署一站式开发,给简历添加一点色彩
  18. 计算机网络安全专家高薪,纽约理工大学温哥华校区NYIT计算机网硕士
  19. 主键,唯一索引 聚集索引的关系
  20. 清华老师终于把微服务讲清楚了

热门文章

  1. 榜样的力量——2019 IDC中国数字化转型年度盛典启示录
  2. HMM(Forward algorithm)向前算法
  3. iPhone密码管理
  4. 机器学习预测股票涨跌
  5. UE4 蓝图接口 BluePrint Interface
  6. 对服务器系统盘扩容,服务器系统盘扩容
  7. python一笔画五角星_隐藏在一笔画五角星中的秘密,画法简单的符号,却有丰厚的内涵...
  8. 用JQuery实现简单计时答题游戏
  9. win7系统如何加速计算机启动,如何在win7中启动3D加速|在win7中启动3D加速的详细步骤...
  10. 遥感的自然生态监测 专题