首页
学习
活动
专区
圈层
工具
发布

ListView优化和列表首尾使用

一、使用convertView 前面讲的自定义ArrayAdapter和自定义BaseAdapter,都会重写getView()方法,虽然可以正常使用,但其实效率非常低。...当然这是不可能的,毕竟Android系统的内存有限,不可能无限新建列表项组件。实际上Android缓存了视图组件,由于Android系统中有一个Recycler构件,其工作原理如下图所示。...三、列表头和列表尾的使用 在实际使用ListView时,经常会有这样的需求:当位于ListView最顶部的时候,显示一个搜索框可以搜索列表内容,或者显示下拉刷新;当位于ListView最底部的时候...由于这显示的内容同ListView列表项内容不同,可以通过控制position来实现效果,但是非常繁琐,当然Android中提供了ListView的列表头和列表尾功能。...给ListView添加HeadView和FootView,当ListView滑动至列表第一项时使HeadView滑动出现,当ListView滑动至列表最后一项时使FootView滑动出现。

2.1K80

Android开发:ListView、AdapterView、RecyclerView全面解析

工作原理:当屏幕需要显示x个item时,那么ListView只会创建x+1个视图,当第一个item离开屏幕时,此item的view就会被拿来重用(用于显示下一个item(即第x+1个)的内容)。...工作原理实例 假如屏幕只能显示7个item,那么ListView只会创建(7+1)个item的视图。当第1个item离开屏幕时,此item的view就会被拿来重用(用于显示第8个item的内容)。...生成方式 生成列表视图(ListView)的方式主要有两种: - 直接用ListView进行创建 - 让Activity继承ListActivity 2. xml文件配置信息 的列表项上绘制的Drawable android:scrollingCache 滚动时是否使用缓存 如果设置为true,则在滚动时将会使用缓存 android...工作原理 当屏幕需要显示x个item时,那么ListView只会创建x+1个视图,当第一个item离开屏幕时,此item的view就会被拿来重用(用于显示下一个item(即第x+1个)的内容)。

4.3K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    ListView详细介绍与使用

    ListView 简介 ListView 是 Android 系统为我们提供的一种列表显示的一种控件,使用它可以用来显示我们常见的列表形式。继承自抽象类 AdapterView。...工作原理 ListView 仅是作为容器(列表),用于装载显示数据(就是上面的一个个的红色框的内容,也称为 item)。item 中的具体数据是由适配器(adapter)来提供的。...假如当屏幕一次可以显示 x 个 item 时(不用是完整的),那么 ListView 会创建 x+1 个视图;当第1个 item 离开屏幕的时候,此时这个 item 的 View 就会被回收,再入屏的...如果 item 中的布局有点复杂的话,item 中的每个控件又需要设置不同的值,那么 item 中的每个布局的内容就又对应 HashMap 中的值了。...的长度逐一绘制 ListView 的每一行 获取数据时,通过 getItem() getItemId() 来获取 Adapter 中的数据 重点看一下 getView 实现方式一: 直接返回索引对应的数据的视图

    2.1K20

    Carson带你学Android:全面解析列表ListView与AdapterView

    ):作为View 和 数据之间的桥梁 & 中介,将数据映射到要展示的View中 当需显示数据时,ListView会向Adapter取出数据,从而加载显示,具体如下图 结论 ListView负责以列表的形式显示...,ListView不会为每一个数据创建一个视图,而是采用了Recycler组件,用于回收 & 复用 View 当屏幕需显示x个Item时,那么ListView会创建 x+1个视图;当第1个Item...生成方式 生成列表视图(ListView)的方式主要有两种: 直接用ListView进行创建 让Activity继承ListActivity 2. xml文件配置信息 的列表项上绘制的Drawable android:scrollingCache 滚动时是否使用缓存 如果设置为true,则在滚动时将会使用缓存 android...()时,都要重新通过 findViewById() 寻找View组件 & 重新绘制View // 当列表项数据量很大时会严重影响性能,即体现为下拉很慢、卡 /** * 重写方式2:使用convertView

    1.8K10

    android学习笔记----ListView和各种适配器简介

    ArrayAdapter具有说明来告诉它自己如何创建列表项视图,并返回给ListView,当屏幕被占满后 ListView 将停止向ArrayAdapter 寻求更多的列表项,列表项视图仅在需要时才创建...,当视图被滚动离开屏幕后,它们就会被添加到Scrap Pile,比如前两个列表项不再可见,它们将进入 Scrap Pile,然后当我们请求新的列表项时,我们可以通过将这些视图再返回到 ArrayAdapter...重复使用它们,ListView 将请求列表中特定位置的视图,同时传入之前用过的视图。...比如,ListView 请求的是位置 6 处的项,并向 ArrayAdapter 传入可重复使用的以前视图,ArrayAdapter 可以通过在回收过的视图里放入数据,使用回收的视图,然后再接着比如通过调用...当ArrayAdapter填充单个TextView时,使用第二个参数。因为这是我们自定义的适配器,所以适配器将不使用第二个参数,因此它可以是任何值。在这里,我们使用0。

    3.2K10

    【Android从零单排系列四十六】《Android中自定义ListView的实现方法》

    一  ListView 介绍 ListView 是 Android 中的经典列表控件,用于展示一组垂直滚动的项目。...二  ListView的缺点 ListView 在 Android 中是一个经典的列表控件,但也存在一些限制和缺点,包括: 性能问题:ListView 对于大量数据的展示可能存在性能问题,特别是当列表项变得复杂或包含大量视图元素时...虽然可以通过自定义适配器来定制每个列表项的外观,但对于不同类型的列表项布局,ListView 并不提供直接的支持。为了实现更复杂的布局需求,可能需要使用其他控件或库。...固定高度限制:ListView 默认情况下要求每个列表项具有相同的高度,这限制了列表项的灵活性。如果列表项高度不同,需要重写适配器来处理不同高度的情况。...运行应用程序后,您将看到一个显示列表项的自定义列表视图。 通过在 CustomAdapter 类中添加更多的逻辑和布局定义,您可以根据需求定制每个列表项的外观和功能。

    1.4K20

    跟我学Android之十一 列表和适配器

    掌握掌握使用各类适配器显示列表数据。 掌握列表视图 ListView 的用法。 掌握下拉视图 Spinner 的用法。...key的内容所对应的显示视图的资源id的数组 使用SimpleAdapter显示复杂数据需要设计好数据内容 u不过视图如何复杂,列表的每一项内容由多个数据字段构成...() { return dataList.size(); } u覆盖getView()方法,用于向列表提供列表项的显示视图 View getView (int position..., View convertView, ViewGroup parent) Ø列表项视图通常有两种方法 l通过布局资源定义,然后采用动态加载的方法使用 l通过程序实现布局 创建自定义适配器...u需要自定义Spinner的列表项视图 u使用自定义列表项视图的办法有多种 Ø通过自定义适配器来使用 Ø通过继承ArrayAdapter

    1K10

    跟我学Android之十一 列表和适配器

    了解 AdapterView 的继承关系图 。 掌握掌握使用各类适配器显示列表数据。 掌握列表视图 ListView 的用法。 掌握下拉视图 Spinner 的用法。...ListView控件用于以列表形式显示数据 uListView采用MVC模式将前端显示和后端数据进行了分离 ØListView装载数据时并不使用ListView本身的方法 Ø通过指定一个Adapter...dataList.size();} u覆盖getView()方法,用于向列表提供列表项的显示视图 View getView (int position, View convertView, ViewGroup...parent) Ø列表项视图通常有两种方法 l通过布局资源定义,然后采用动态加载的方法使用 l通过程序实现布局 创建自定义适配器, getView()方法覆盖示例 public View getView...u需要自定义Spinner的列表项视图 u使用自定义列表项视图的办法有多种 Ø通过自定义适配器来使用 Ø通过继承ArrayAdapter,覆盖getDropDownView()方法 实现带图片的Spinner

    1K10

    TabLayout+ViewPager+Fragment实现切页展示「建议收藏」

    所使用的两种PagerAdapter的差别分析及选择。 懒加载策略。 卡顿及性能优化建议。...一般情况下上面四个章节的内容足以应付过来,但是往往在一些特殊的情况下,仍然会遇到一些不能解决的问题,这时就需要深入到源码之中来具体问题具体分析。话不多说,接下来将进行使用总结。...超出这个limit范围的Fragment就会被销毁,而上述两种PagerAdapter的差别就是销毁的流程不同!...就是被动加载,当Fragment页面可见时,才从网络加载数据并显示出来。那什么时候Fragment可见呢?...后者卡顿通过懒加载的形式能够完美解决,而前者因实例创建引起的卡顿则提出了三种不同的优化选择,应该说,每一种方案都有利有弊,并没有绝对的好与不好,在项目运用中,还是得根据需求和实际情况来进行选择,当然,要从内存泄漏

    4.5K10

    2014-10-27Android学习------程序源码+知识总结------城市列表应用程序

    csdn 上,地址:http://download.csdn.net/detail/u014737138/8100691 接下来需要补充下这个应用项目中我们还没有学习完的知识点: 1.视图的更新...();这样一个函数: 1).invalidate()是用来刷新View的,必须是在UI线程中进行工作。...3、setVisibility()方法 : 当View可视状态在INVISIBLE转换VISIBLE时,会间接调用invalidate()方法, 继而绘制该View...说白了就是注意一点:invalidate不能再线程中直接使用,但是可以在UI线程中直接使用,postinvalidate可以直接在线程中使用 我们在应用程序中类是继承View的,它就是一个UI线程,那么它就可以直接使用了...(int position, View convertView, ViewGroup parent) { } 其中以getView尤为重要,非常的重要,它是负责刷新ListView的列表的

    45330

    Android开发笔记(三十八)列表类视图

    Adapter 适配器Adapter与适配视图是配合使用的,每个适配类视图都要搭配相应的适配器,才能够正常工作。...spinnerMode只能在xml中设置,不能在代码中设置。 代码中的方法: setPrompt : 设置标题文字。 setPromptId : 设置标题视图的资源ID。...总结ListView的属性设置有两个注意点(不知算不算Android的bug,呵呵): 1、divider设置为@null时,就不能再设置dividerHeight为非0值,不然列表末尾元素显示有问题...; 2、不管是否指定headerDividersEnabled,列表上方的分隔线都不会显示; ListView的使用方式 Android提供了两种使用ListView的方式: 1、ListActivity...两种使用方式的区别如下: 1、ListActivity方式的视图id被设置为系统id,不方便在代码中修改该列表视图的属性; 2、ListActivity方式只实现点击方法、未实现长按方法,不方便响应列表项的长按事件

    3.8K20

    Android:Fragment + Activity 二合一

    二合一:当Activity内的Fragment数大于1时,滑动finish的是Fragment,如果小于等于1时,finish的是Activity。...,FragmentManager也会为你保存Fragment,当重启app时,我们可以从FragmentManager中获取这些Fragment。...当我们拖拽时,上个Fragment A的View是GONE状态,所以我们要做的就是当判断拖拽发生时,Fragment A的View设置为VISIBLE状态,这样拖拽的时候,上个Fragment A就被完好的显示出来了...原因在于: SwipeBackFragment库是一个仅实现Fragment&Activity拖拽返回的基础库,适合轻度使用Fragment的小伙伴(项目属于多Activity+多Fragment,Fragment...Fragmentation主要是在项目结构为 单Activity+多Fragment,或者重度使用Fragment的多Activity+多Fragment结构时的一个Fragment帮助库,Fragment-SwipeBack

    88920

    Android开发:实现滑动退出 Fragment + Activity 二合一

    二合一:当Activity内的Fragment数大于1时,滑动finish的是Fragment,如果小于等于1时,finish的是Activity。...,当重启app时,我们可以从FragmentManager中获取这些Fragment。...当我们拖拽时,上个Fragment A的View是GONE状态,所以我们要做的就是当判断拖拽发生时,Fragment A的View设置为VISIBLE状态,这样拖拽的时候,上个Fragment A就被完好的显示出来了...原因在于: SwipeBackFragment库是一个仅实现Fragment&Activity拖拽返回的基础库,适合轻度使用Fragment的小伙伴(项目属于多Activity+多Fragment,...Fragmentation主要是在项目结构为 单Activity+多Fragment,或者重度使用Fragment的多Activity+多Fragment结构时的一个Fragment帮助库,Fragment-SwipeBack

    1.2K30

    C#-Xamarin的Android项目开发(二)——控件应用

    GridView 首先,Android的GridView是我见过最奇葩的列表使用方式。。。 然后,我们开始学习使用它把。...其中重写的Count属性需要特别注意,他代表我们列表的显示数,他是需要赋值的。这里的事例为其定义了一个常数9。 接下来我们重点看下GetView方法。...因为,至于为什么会叫GetView,我想,大概是因为他即干了行绑定数据的事,又干了行视图布局的事,所以没有更合适的命名,才这么叫的吧。...这也是为什么我感觉他奇葩的原因,因为在之前的Activity和布局中已经混淆了视图和数据,然后,在控件里,我们又一次把数据和布局搅和在了一起。。。。 下面我们看看它是如何混淆,不,他是如何工作的吧。...然后,我们通过paramInt来判断当前行,正常情况,在这里找到Activity的数据集合,找到集合的对应行赋值即可了。 Demo里我们做了一下特殊处理,我们为行视图添加了图片。

    1.7K40

    Android开发之漫漫长途 XIV——ListView

    那么本篇我们来说一下ListView,虽然现在ListView逐渐的被RecyclerView取代,包括我自己的项目中也是使用的RecyclerView。那么为什么要分析一个“过时”的东西呢?...因为RecyclerView的前辈,许多遗留项目是基于ListView的,可能因为种种原因不能更换或者更换代价太大,那么我们如何在ListView的基础上优化App就成了我们不得不面对的问题。...在面试初中级Android开发工程师的时候,关于列表项展示这块基本上是必问的,你如果使用的ListView,那么ListView的性能优化,以及后面要讲到的下拉刷新上拉加载,基本也是必问的,因为这是你平常项目开发中也是肯定要考虑到的点...*ScrapViews是可以被适配器使用的旧视图,以避免不必要地分配视图。...视图如果被发现,就会从mActiveViews删除,也就是说不能从同一个位置的View不能从mActiveViews中获得第二次) ?

    1.3K30

    2-VI--ListView的基本使用及优化

    当滑动很快时,不断创建View条目,会卡卡的 ---- 二、优化1、使用convertView 1.关于convertView源码注释: The old view to reuse, if possible...如果它果不能转换这个视图来显示正确的数据,这个方法能创建一个新的View Heterogeneous lists can specify their number of view types, so that...this View is always of the right type 不均匀的列表可以指定它们的视图类型的数量,因此这个视图总是正确的类型 2.修改:MyListViewAdapter#getView...当滑动非常非常快时,会有一点点会卡 ---- 三、优化2、使用ViewHolder 曾经我纳闷,好好的用ViewHolder干嘛,convertView之后已经很好了啊 现在明白:每个item的创建都会执行...findViewById和创建ViewHolder 数据200000条,测试时,当滑动非常非常非常快时,感觉良好 ---- 附录、布局: activity_main.xml <?

    61910

    设计模式学习之适配器模式

    定义及使用场景 定义:适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配无法在一起工作的两个类可以在一起工作。...适配器模式从实现方式上分为两种,类适配器和对象适配器,这两种的区别在于实现方式上的不同,一种采用继承,一种采用组合的方式。...另外从使用目的上来说,也可以分为两种,特殊适配器和缺省适配器,这两种的区别在于使用目的上的不同,一种为了复用原有的代码并适配当前的接口,一种为了提供缺省的实现,避免子类需要实现不该实现的方法。...1.对于类适配器,由于适配器直接继承了Adaptee,使得适配器不能和Adaptee的子类一起工作,因为继承是静态的关系,当适配器继承了Adaptee后,就不可能再去处理 Adaptee的子类了。...定制适配器与缺省适配器 根据目的的不同,适配器模式也可以分为两种,那么上述便是第一种,可称为定制适配器,还有另外一种称为缺省适配器。

    53710

    Android开发之ListView使用经验分享

    在Android开发中,ListView是使用最广泛的组件之一,虽然谷歌推出了RecycleView,但是很多项目中依旧在使用ListView,本文将总结一下使用过程中遇到的一些问题,与大家共勉~~~...>> data, int resource, String[] from, int[] to) 参数含义: context:关联SimpleAdapter运行着的视图的上下文。...那么在加载列表项时,需要通过组件的id和data参数中List元素中的Map对象对应) from: 参数是Map对象的key to :表示组件的id (假设from = new String[]{"userId...position和id的值是一样的 注意: 在点击事件中,经常遇到的一个坑是:ListView不能响应onItemClick事件 发生原因:当listview中包含button,checkbox等控件的时候...1、去除默认的点击选中时的颜色 设置列表layout的backgroudcolor属性就OK了。

    1.9K60

    Andorid-ListView简单使用以及BaseAdapter入门

    ---- 3.列表从底部开始显示:stackFromBottom 如果你想让列表显示你列表的最下面的话,那么你可以使用这个属性,将stackFromBottom 属性设置为true即可,设置后的效果图如下...也正是在这个过程中完成了适配器的主要转换功能,把数据和资源以开发者想要的效果显示出来。也正是getView的重复调用,使得ListView的使用更为简单和灵活。  ...比如:没有完成getItemId方法的功能实现的话,当调用ListView的getItemIdAtPosition方法时将会得不到想要的结果,因为该方法就是调用了对应的适配器的getItemId方法。...* 这里需要注意的一点是对于一个元素的ID实际上和position不能认为是一个东西,实际上可以是完全不同的值 */ @Override public long getItemId...如果你嫌英语太麻烦,那么可以直接看我对此的理解:  首先我们要理解一点,为何使用Adapter适配器,Adapter就是给我们视图资源在调用数据的时候能够相当程度上方便,视图只需要直接和Adapter交互

    1.8K20

    Android Material Design系列之FloatingActionButton和Snackbar

    这个系列都是主讲的Material Design风格的控件,所以都是控件的一些基本使用,也会扩展讲一些与这个控件相关的东西和效果,如果都会了的同学,可以不看这个系列。...默认正常显示时的背景颜色 app:elevation :FloatingActionButton阴影的深度,默认时的阴影 app:rippleColor:FloatingActionButton点击时的背景颜色...那我们现在就研究改如何在滑动列表时隐藏和显示这个悬浮按钮FloatingActionButton。...FloatingActionButton显示与隐藏 那如何实现滑动列表时,下滑显示和上滑隐藏的效果呢?...其实改变Snackbar的位置和设置icon的位置布局大同小异,代码如下: // 获取 snackbar 视图 View snackbarView = snackbar.getView(); ViewGroup.LayoutParams

    2.7K60
    领券