首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当你滚动Android ListView时,会有多个项目被选中

。这是因为ListView的重用机制导致的。

在Android中,ListView是一种常用的列表视图控件,用于展示大量数据。为了提高性能和节省内存,ListView采用了重用机制。当滚动ListView时,屏幕上的项目会被复用,即被移出屏幕的项目会被重新利用来展示新的数据项,而不是每次都创建新的项目。

这种重用机制会导致一个问题,即滚动过程中,被复用的项目可能会保留之前的选中状态。这是因为ListView并不会自动处理项目的选中状态,而是依赖于开发者在适配器中正确处理项目的选中状态。

为了解决这个问题,开发者可以在适配器的getView()方法中根据数据的选中状态来设置项目的选中状态。具体做法是,在getView()方法中判断当前数据项是否被选中,如果是,则设置项目的选中状态为true,否则设置为false。

另外,为了确保只有一个项目被选中,开发者还可以在适配器中维护一个选中项的索引,每次点击项目时更新该索引,并在getView()方法中根据索引来设置项目的选中状态。

总结起来,当滚动Android ListView时,会有多个项目被选中是由于ListView的重用机制导致的。为了解决这个问题,开发者需要在适配器中正确处理项目的选中状态,并确保只有一个项目被选中。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

初识ListView

AdapterView可以包括多个“列表项”,并将多个“列表项”以合适的形式显示出来。 AdapterView显示的多个“列表项”由Adapter提供。...:drawSelectorOnTop setDrawSelector(boolean) 如果该属性设置为 true,选中的列表项将会显示在上面 android:fastScrollEnabled 设置是否允许快速滚动...如果该属性设置为 true,将会显示滚动图标,并允许用户拖动该滚动图标进行快速滚动 android:listSelector setSelector(int) 指定被选中的列表项上绘制的 Drawable...android:scrollingCache 如果设置为 true,该组件在滚动将会使用绘制缓存 android:smoothScrollbar setSmoothScrollbarEnable(...设置是否对列表项进行过滤,当该 AbsListView 对应的 Adapter 实现了 Filter 接口该属性才会起作用 android:transcriptMode 设置该组件的滚动模式。

1.5K50
  • 2014-10-27Android学习------布局处理(五)------ListView布局继续学习-----城市列表应用程序

    "#000000" 去除listview的拖动背景色 自定义listview的时候,当你不使用android:cacheColorHint=“#00000000”会出现下面选中一个空间黑色底色的情况,...破坏整体美观度: 什么叫自定义ListView,就是你不使用系统的id号 @id/android:list 而是自己去定义一个id 这里还需要讲一个属性就是选中是什么颜色:android:listSelector...="" 当你不使用android:listSelector属性,默认会显示选中的item为橙黄底色,有时候我们需要去掉这种效果: 有的人模拟器可能不是橙黄底色,比如我的就是一种灰色调的选中色 特别提供:...默认选择的黄色背景 解决:在java文件中使用listview.setSelector()方法, android:listSelector="#00000000"//这样写是透明的,也可加入Drawable...属性 自由控件已经超过了布局的大小就会滚动 这个布局的大小就是指一屏 内容长度要超出整屏的高度就能实现滑动有以下设置none(隐藏),horizontal(水平),vertical(垂直) 这里面涉及到一个效果的问题

    42020

    Android从零单排系列二十】《Android视图控件——ListView

    ListView基本介绍 ListViewAndroid开发中常用的列表视图控件,用于展示垂直滚动的可变长度的数据列表。...功能:ListView可以在有限的屏幕空间内显示大量的数据,并支持用户滚动浏览。它提供了一个可滚动的列表容器,可以逐项地展示数据元素。...添加数据:通过适配器向ListView添加数据,可以使用适配器的方法(如add()、addAll())添加单个或多个数据项。一旦数据添加到适配器,ListView会自动刷新并显示新数据。...推荐在新项目中使用RecyclerView,它提供了更多的定制选项和优化功能。...android:listSelector:设置当列表项被选中的背景效果,可以是颜色值或者drawable资源。

    55910

    A021-列表容器之GridView

    概述 GridView是Android的另一个列表容器,用法也跟ListView类似,它的布局是一个网格,一行可以有多个项,并且整个视图可以滚动,我们常见的应用有手机中的图库、launcher里面的应用列表...、类似微信多张图片等,总的来说,ListView主要应用于单列多行的列表,然而GridView主要应用于多行多列的网状布局。...:cacheColorHint=”#00000000” //去除拖动默认的黑色背景 7.android:listSelector=”#00000000” //去除选中的黄色底色 8.android...true就可以实现滚动条的自动隐藏和显示 10.android:fastScrollEnabled=”true” //GridView出现快速滚动的按钮(至少滚动4页才会显示) 11.android...” //设置为true,你做好的列表就会显示你列表的最下面 14.android:transcriptMode=”alwaysScroll” //当你动态添加数据,列表将自动往下滚动最新的条目可以自动滚动到可视范围内

    76230

    Android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能

    最近项目中需要用到ListView下拉刷新的功能,一开始想图省事,在网上直接找一个现成的,可是尝试了网上多个版本的下拉刷新之后发现效果都不怎么理想。...* 当ListView触摸时调用,其中处理了各种下拉刷新的具体逻辑。...失去焦点,否则点击的那一项会一直处于选中状态 listView.setPressed(false); listView.setFocusable(false); listView.setFocusableInTouchMode...在onTouch方法中的第一行就调用了setIsAbleToPull方法来判断ListView是否滚动到了最顶部,只有滚动到了最顶部才会执行后面的代码,否则就视为正常的ListView滚动,不做任何处理...当ListView滚动到了最顶部,如果手指还在向下拖动,就会改变下拉头的偏移值,让下拉头显示出来,下拉的距离设定为手指移动距离的1/2,这样才会有拉力的感觉。

    5.4K110

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

    离开屏幕,此Item的View回收至缓存,入屏的Item的View会优先从该缓存中获取 注: 只有Item完全离开屏幕后才可复用,这也是为什么ListView要创建比屏幕需显示视图多1个的原因...为点击到的Item设置图片 如果该属性设置为true,选中的列表项将会显示在上面 android:fastScrollEnabled 设置是否允许快速滚动 如果该属性设置为true,将会显示滚动图标,并允许用户拖动该滚动图标进行快速滚动...android:listSelector 指定被选中的列表项上绘制的Drawable android:scrollingCache 滚动是否使用缓存 如果设置为true,则在滚动将会使用缓存 android...,通用用于扩展。...); } } 结果显示 6.3 BaseAdapter 定义 可自定义ListView,通用用于扩展。

    1K10

    Android listview中使用checkbox「建议收藏」

    下面开始正题,在listview的item中使用checkbox,当你按照普通的listview的用法使用时,你会遇到下面这样的问题: 1.checkbox可以点击,但是listview的item无法点击...2.无法获得checkbox点击的是哪一行 第一个问题涉及到事件分发,下一篇再扯(我会按照我的理解,通俗易懂的来描述),第二个问题我的理解就是getview无法重绘的原因,这里拿不到position...的值,为了能解决我的问题,我需要换一种思路,也就是我今天介绍的方法:屏蔽checkbox的选择事件,也就是说checkbox不能响应选中事件,当用户点击listview的item,制造假象,用代码控制选中...checkbox 恩,差不多就这些了,由于代码直接写到项目中了,就不写demo了,直接贴一下主要代码,仅供参考,如果您有更好的方法可以相互交流 1,设置 checkbox无法响应点击事件 android...:clickable="false" android:focusable="false" android:focusableInTouchMode="false" 2

    65030

    WPF是什么_wpf documentviewer

    其它自定义View 三、结语 一、前言 项目中要用到一个数据分页栏,虽然自己没有实现过,但凭经验感觉它和ListBox/ListView有关。...例如,在上面图示中,每个员工(employee类型)的姓(last name)、名(first name)和ID都作为一个集合显示,因为它们在一个行中。...与GridView进行用户交互 当你在程序中使用了GridView,用户可以与GridView交互并修改其格式。例如,用户可以重新排序列(拖动表头使整列移动)、调整列的大小、选中表中的项和滚动内容。...选中行项 用户可以选择GridView的一个或多个项。 如果要更改选中项的样式,请参见ListView中使用触发器对选中项进行样式设置。...滚动查看内容 若GridView的大小不足以显示所有项,用户可以使用ScrollViewer控件提供的滚动条水平或垂直滚动。若所有内容一开始都可见,滚动条将被隐藏。

    4.7K20

    Android最常用的控件ListView(详解)

    listView.setAdapter(adapter); //6、为列表中选中的项添加单击响应事件 listView.setOnItemClickListener...2.点击事件响应 Parent: 指定哪个AdapterView(可能会有多个ListView,区分多个ListView) View: 为你点击的Listview的某一项的内容,来源于adapter...context, int resource, @NonNull List objects) { super(context, resource, objects); } //每个子项滚动到屏幕内的时候会被调用...四.提升ListView的运行效率 目前我们ListView的运行效率是很低的,因为在FruitAdapter的 getView()方法中,每次都将布局重 新加载了一遍,将快速滚动的时候,...的点击事件 ListView滚动毕竟只是满足 了我们视觉上的效果,下面我们来学习ListView如何才能响 应用户的点击事件。

    2K10

    ListView-1(包括常用属性和方法)「建议收藏」

    ,颜色会成为选中项的背景色 android:scrollbars=”vertical” 只要值为horizontal或vertical才会显示滚动条,并且会自动隐藏和显示...android:fastScrollEnabled=”true” 快速滚动效果,在快速滚动的时候旁边会出现一个小方块的快速滚动 android:listSelector...=”” 选中的item的颜色 android:entries            列表数据源 android:fastScrollEnabled=”true...” 可以拽着滚动条快速滑动 listView.setSelection(list.size()); // 将ListView定位到最后一行 传0也就是显示listview的第一行了 listview.setSelector...(R.drawable.choose_item_right); //在代码中为ListView设置选中项的背景图片 android:listSelector=”@drawable/choose_item_right

    64820

    Android中Fragment的分屏显示处理横竖屏显示的实现方法

    + "表格布局使用<TableLayout 标记定义,在表格布局中,可以添加多个<TableRow 标记," + "每个<TableRow 标记占用一行,由于<TableRow 标记也是容器...在表格布局中,列可以隐藏," + "也可以设置为伸展的,从而填充可利用的屏幕空间,也可以设置为强制收缩,直到表格匹配屏幕大小。"...默认情况下,帧布局是从屏幕的左上角(0,0)坐标点开始布局," + "多个组件层叠排序,后面的组件覆盖前面的组件。"...; import android.widget.ListView; public class ListFragment extends android.app.ListFragment { boolean...if (dualPane) { // 当在一屏上同时显示列表和详细内容 getListView().setItemChecked(index, true); // 设置选中列表项为选中状态 DetailFragment

    3K71

    腾讯开源超实用的UI轮子库,我是轮子搬运工

    在 item 右侧显示一个开关或箭头或自定义的View QMUIDialog 提供了一系列常用的对话框,解决了使用系统默认对话框在不同 Android 版本上的表现不一致的问题。...QMUIWrapContentListView 支持高度值为 wrap_content 的 ListView,解决原生 ListView 在设置高度为 wrap_content 高度计算错误的 bug...QMUIStickySectionLayout 支持二级结构的列表的折叠与展开;支持滚动悬浮当前 section header; 支持在section list 或 section item list...QMUISpanHelper 提供了方法使得 QMUIMarginImageSpan 能更便捷地使用。...提供多个常用的 View 相关工具方法,如对 View 设置单个方向的 padding、从 ViewStub 中获取一个 View、判断 ListView 是否已经滚动到底部等等。

    4.8K30

    A020-列表容器之ListView

    概述 前面介绍了Android UI中的五大布局容器,本节课介绍实际项目当中经常会用到的组件-ListView,它也是一个布局容器,它的每一项就是我们的列表项,每一个列表项都是一块独立的布局,我们可把数据填充到每一个列表项中...的时候,才会显示滚动条,并且会自动影藏和显示 android:fastScrollEnabled=”true” //快速滚动效果,配置这个属性,在快速滚动的时候旁边会出现一个小方块的快速滚动效果...属性,需要用ListView或者其它显示大量Items的控件实时跟踪或者查看信息,并且希望最新的条目可以自动滚动到可视范围内。...android:background=”@drawable/bg”,不过不要高兴地太早,当你这么做以后,发现背景是变了,但是当你拖动,或者点击list空白位置的时候发现ListItem都变成黑色的了,...android:fadingEdge=”none” 设置后没有阴影了~ 第六scrollbars属性,作用是隐藏listView滚动条, android:scrollbars=”none”与setVerticalScrollBarEnabled

    70030

    CoordinatorLayout+AppBarLayout实现上滑隐藏ToolBar-Android M新控件

    布局里其它标记了app:layout_behavior的子View(LinearLayout、RecyclerView、NestedScrollView等)就能够响应(如ToolBar、TabLayout)控件标记的滚动事件...,那么当LinearLayout滚动便可触发ToolBar中的layout_scrollFlags效果 即往上滑动隐藏ToolBar,下滑出现ToolBar,而不会隐藏TabLayout,因为TabLayout...enterAlwaysCollapsed 当你的视图已经设置minHeight属性又使用此标志,你的视图只能已最小高度进入,只有当滚动视图到达顶部才扩大到完整高度 exitUntilCollapsed...TabLayout TabLayout-Android M新控件 说到TabLayout,就是实现多个Tab之间的切换,不过Google在Design library新推出的TabLayout既实现了固定的选项卡...tabSelectedTextColor —设置选中状态下Tab上字体的颜色。

    2.1K30

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

    那么本篇我们来说一下ListView,虽然现在ListView逐渐的RecyclerView取代,包括我自己的项目中也是使用的RecyclerView。那么为什么要分析一个“过时”的东西呢?...ListView的进阶使用 属性介绍 在这一小节中,介绍一些ListView 中的一些重要属性,有一些经常在项目开发中用到,而有一些不太常用,不过可以作为知识面的扩充 分割线 android:divider..." //设置分割线的图片资源 android:divider="@drawable/@null" //不想显示分割线 滚动android:scrollbars="none"//隐藏listView...需要注意的是当你滚动内容较小,不到当前ListView的3个屏幕高度则不会出现这个快速滚动滑块,同时该方法仍然是AbsListView的基础方法,可以在ListView或GridView等子类中使用快速滚动辅助...android:background="@drawable/bg",不过不要高兴地太早,当你这么做以后,发现背景是 变了,但是当你拖动,或者点击list空白位置的时候发现ListItem都变成黑色的了

    91130

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

    特征: AdapterView继承自ViewGroup,本质是个容器 AdapterView可以包含多个“列表项”,并将这多个列表项以合适的形式展示 AdapterView显示的列表项内容由Adapter...在运行时,当需要显示数据ListView会针对数据项向Adapter取出数据,从而加载到界面上。...为点击到的Item设置图片 如果该属性设置为true,选中的列表项将会显示在上面 android:fastScrollEnabled 设置是否允许快速滚动 如果该属性设置为true,将会显示滚动图标,并允许用户拖动该滚动图标进行快速滚动...android:listSelector 指定被选中的列表项上绘制的Drawable android:scrollingCache 滚动是否使用缓存 如果设置为true,则在滚动将会使用缓存 android...,通用用于扩展。

    3.5K30

    Android ListView那些事

    ListView绘制它的child,会导致child与window的背景色相混合,当ListView上下滑动或Fling,性能就会下降。...,由于这个bitmap是不透明的,所以就不会有混合计算,这样就提高了绘制的效率。...但是,由于系统默认的cache color hint的颜色是#191919,当你滑动ListView,你就会看到一个黑色的背景。 出现这种情况肯定是不正确的,那么怎么解决呢?...Divider 通过android:divider XML属性来指定。 Divider可以颜色或者Drawable,当绘制内容ListView会自动地计算出divider的位置。...Focus,也就是说我们可以通过将ListView中Item中包含的所有控件的 focusable属性设置为false,这样的话ListView的Item自动获得了Focus的权限,也就可以被选中了。

    44320

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

    AdapterView AdapterView顾名思义是适配器视图,Spinner、ListView和GridView都间接继承自AdapterView,这三个视图都存在多个元素并排展示的情况,所以需要引入适配器模式...3、定义了单个元素的点击、长按、选中事件。...表示以跑马灯方式显示字符串(即从左向右循环滚动,跑马灯方式需同时指定singleLine为true)。...总结ListView的属性设置有两个注意点(不知算不算Android的bug,呵呵): 1、divider设置为@null,就不能再设置dividerHeight为非0值,不然列表末尾元素显示有问题...两种使用方式的区别如下: 1、ListActivity方式的视图id设置为系统id,不方便在代码中修改该列表视图的属性; 2、ListActivity方式只实现点击方法、未实现长按方法,不方便响应列表项的长按事件

    2.3K20

    ListView使用技巧-更新中

    设置项目间分割符 2.设置项目间分隔线 ListView各个项目之间,可以通过设置分隔线来进行区分,系统提供了divider和dividerHeight这两个属性来帮我们实现这一功能。...隐藏ListView滚动条 3.隐藏ListView滚动条 默认的ListView滚动,在右边会显示滚动条,指定当前滚定的位置。...我们可以通过scrollbars属性来控制ListView滚动状态。特别的,当scrollbars设置为noneListView无论滚动还是不滚动,就都不会出现滚动条了。...case 2:// 隐藏ListView滚动条 LogUtils.d(position); // false-一直都显示 true-不活动隐藏...取消ListView的Item点击效果 当点击ListView的某一项Item,系统默认会出现一个点击效果,在Android5.X上是一个波纹的效果,而在5.X以下是一个改变背景颜色的效果,但是我们可以通过修改

    94430
    领券