Android ListView GridView 错位

Android仿京东侧滑筛选 仿京东筛选 简单介绍 这个demo写的是仿京东的侧滑筛选页面,点击进入筛选后进入二级筛选,两次侧滑的筛选,还包括ListView+CheckBox滑动冲突,ListView+ GridView显示一行问题解决,接口回调传递数据等 效果图 简单得代码介绍1.首页侧滑用的是安卓官方V4包中的DrawerLayout <?xml version="1.0" encoding="utf-8"? 阅读详情

在做Android开发的时候很多地方都要用ListView和GridView, 要快速的加载一个列表并且让它滑动起来非常的流畅我们是一定要做到的,那我会用一些常用的异步加载框架,比如Imageloader,fresco等等。但是我又遇到了问题,使用异步加载的时候经常出现item错位的现象,本来要显示的下一条数据的位置竟然出现了上一条的数据,我当时很费解。对于为什么会出现这样的情况网上也有很多的答案,是因为复用了convertView造成的,这里我写一下我的一些解决方案,本人亲测,解决了我的问题:

一 在Adapter的getView的时候如果你是用的 if 语句,那就一定要有相应的else语句,如果只有if那是很容易错位的。

二 如果上述方法试过了还是错位那还有另一种方法,不让ListView或者GridView自己滚动,自己自定义一个, 然后在ListView的布局外面加一层ScrollView就可以了

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.GridView;

/**
 * Created by yue on 2016/1/6.
 * 自定义不滑动不错位的 GirdView
 */
public class MyCustomGridView extends GridView {

    public MyCustomGridView(Context context) {
        super(context);
    }

    public MyCustomGridView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyCustomGridView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
                MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }

    public boolean dispatchTouchEvent(MotionEvent ev) {
        if(ev.getAction() == MotionEvent.ACTION_MOVE){
            return true;//禁止Gridview进行滑动
        }
        return super.dispatchTouchEvent(ev);
    }
}

三 加tag

@Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = LayoutInflater.from(context).inflate(R.layout.adapter_follow_list_item, parent,false);
        }

        ImageView img = AdapterUtils.getAdapterView(convertView, R.id.stay_mask_img);
        img.setTag(url.toString);
        if(img.getTag()!=null&&img.getTag().equals(url.toString)){
            img.setImageURI(Uri.parse(url));
        }
    }

另外我在写adapter的时候每次都要写一个ViewHolder, 写的我这个累挺, so 发现了一个封装版的使用了泛型的通用工具方法, 本质当然也是ViewHolder, 这里我贴出代码大家一起研究:

 /**
     * 用于自定义adapter if (convertView == null) { convertView
     * =LayoutInflater.from(context).inflate(R.layout.layout_item,parent,
     * false); } ImageView imageView =
     * getAdapterView(convertView,R.id.imageView);
     *
     * @param convertView
     * @param id
     * @return
     */
    @SuppressWarnings("unchecked")
    public static <T extends View> T getAdapterView(View convertView, int id) {
        SparseArray<View> viewHolder = (SparseArray<View>) convertView.getTag();
        if (viewHolder == null) {
            viewHolder = new SparseArray<View>();
            convertView.setTag(viewHolder);
        }
        View childView = viewHolder.get(id);
        if (childView == null) {
            childView = convertView.findViewById(id);
            viewHolder.put(id, childView);
        }
        return (T) childView;
    }

使用方法:

@Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = LayoutInflater.from(context).inflate(R.layout.adapter_follow_list_item, parent,false);
        }

        TextView nickName = AdapterUtils.getAdapterView(convertView, R.id.nickname);
        TextView signature = AdapterUtils.getAdapterView(convertView, R.id.signature);
        Button button = AdapterUtils.getAdapterView(convertView, R.id.cancel);
        return convertView;
    }
Android高效图片异步加载实战:ListView、GridView与ViewPager集成 UIL的强大之处在于高度可定制。你可以根据业务需求精细调优每一个环节。你可能会问:UIL现在都不维护了,为什么还要花时间学它?答案很简单:思想永不过时。尽管Glide、Picasso等新框架在API易用性和功能丰富度上更胜一筹,但它们的核心理念——异步加载、三级缓存、内存控制、请求调度——全都源自UIL这类早期探索者。理解UIL,就像是学习计算机组成原理。你知道现在的CPU有多复杂,但只有搞懂了冯·诺依曼架构,才能真正明白计算机是怎么工作的。所以,下次当你轻松写下。 阅读详情

相关推荐

Android 中ListView和GridView赋值错位

主要介绍了Android 中ListView和GridView赋值错位的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下

android --解决GridView上下滑动出现错位问题

最近在做电子书项目,书架是通过自定义的GridView实现的,在GridView上下滑动的过程中经常会产生数据紊乱等问题, 尝试了很多方式解决,数据项检查都正常,但是还是不能够解决,最终通过度娘得到解决方案: 通过更改自定义Adapter中getView方法,对view进行复用,也就是说当view对象为null的时候创建,不为空的时候继续使用! ... 代码显示如下: 只需要将//  if

feiyang094的专栏 3401

超频玩家必看:TestMem5配置文件详解与内存稳定性测试实战(含黄金参数包)

本文详细解析了TestMem5(TM5)在内存超频稳定性测试中的核心价值与实战应用,特别针对DRAM颗粒特性提供黄金参数配置。通过anta777等专业配置的深度剖析,指导超频玩家精准定位内存故障,优化时序参数,实现性能与稳定性的完美平衡。涵盖从初级验证到极限压测的全流程方案,是硬件发烧友提升系统稳定性的必备指南。

weixin_29198045的博客 1796

listview、gridview单项更新及滑动时数据错乱重复问题

listview和gridview原理是一样的,只是显示方式不一样。这里我就以gridview来说明 首先,为什么要单项更新?因为notifyDataSetChanged()方法是刷新整个数据,当我们的数据量很大时,原本只需要刷新一项,但是整个数据都刷新了,这会导致操作不流

MingYang 2377

AI Agent开发实战:100个真实场景题库解析

AI Agent开发涉及复杂的需求理解、架构设计及安全防护等关键技术环节。在工程实践中,开发者常面临需求偏差、系统崩溃等挑战,特别是在金融、医疗等高要求场景下。通过真实案例题库,开发者能系统性地掌握需求分析、架构决策树建模(如向量数据库选型)、安全攻防策略(如提示词注入防御)等核心技能。这些实战经验不仅能提升Agent的可用性和安全性,还能优化其在电商客服、智能家居等场景中的表现。题库采用动态难度系统,覆盖从基础到高级的开发挑战,是AI工程化落地的重要参考。

weixin_29057695的博客 342

制作Ubuntu22.04启动盘

现在越来越多程序代码都需要运行在linux环境下,运行这些代码的前提是安装一个稳定的linux操作系统。本文选择Ubuntu 22.04去制作系统启动盘。本文主要对ubuntu22.04的启动盘制作过程进行了详细的说明,希望能帮助到有需要的朋友。

lyx_ok的博客 1万+

ListView或GridView快速滑动View错位解决办法

有时在ListView与GridView中绑定视图的时候,会出现错位现象,比如一个ListView或GridView中Iten包含一个CheckBox,当勾选其中几个CheckBox,然后快速滑动的时候,会发现勾选的CheckBox错位了,当然在getView要采用缓存方式,有两种方式解决: 1.在getView()中判断的时候,判断语句必须写完整,不能偷懒,比如: if(orders.get

xiawei327的专栏 1777

量化爬虫第一步:手把手教你搞定同花顺问财的hexin-v参数(附JS逆向实战)

本文详细介绍了如何通过JS逆向技术破解同花顺问财数据接口的核心加密参数hexin-v,构建稳定可靠的量化数据采集方案。从抓包分析到Cookie Hook技术应用,再到环境补全与参数生成实现,手把手教你完成量化爬虫的第一步。文章还提供了实战注意事项与优化建议,帮助开发者规避常见问题。

weixin_42620202的博客 301

android StaggeredGridLayoutManager 瀑布流 数据错乱 间距消失解决方案,亲测可用

android StaggeredGridLayoutManager 瀑布流 数据错乱 间距消失解决方案

瞬神_夜一的专栏 1607

ARS408毫米波雷达数据解析避坑指南:从硬件连接到Python处理

本文提供了ARS408毫米波雷达从硬件连接到Python数据处理的完整实战指南。针对串口通信不稳定、数据解析错误等常见问题,详细解析了硬件连接方案选择、串口数据高效读取策略、二进制协议解析的位操作技巧,并给出了坐标转换、目标跟踪及实时可视化的代码实现,帮助开发者快速搭建稳定的雷达数据处理流水线。

weixin_29091105的博客 149

【程序化天空盒】过程记录01:日月 天空渐变 大气散射

在做一个仿照原神的天空盒,写文章作为技术总结和记录。

qq_41835314的博客 6740

ListView,GridView,RecyclerView滑动错位的终极解决办法

直接讲重点! 假如你的item布局里面包含但不限于这些东西:textView,ImageView,CheckBox,Button... 你一定遇到过滑动列表时item里面的控件错位,该出现的地方不出现,不该出现的地方反而蹦出来的情况。 我也在网上看过很多解决办法,很多说给什么控件设置一个tag呀之类的,看着我都觉得麻烦,其实解决滑动错位并不需要设置什么tag,

u012237192的博客 6068

本地搭建 GitLab 14.1.0版本CI/CD

GitLab 镜像版本 gitlab/gitlab-ce:14.1.0-ce.0 GitLab Runner 镜像版本 gitlab/gitlab-runner:v14.1.0 搭建此套环境是在一台32G的windows电脑上安装的。 使用dokcer安装。 此外还涉及的软件Docker Desktop,WSL 安装GitLab 首先启动 dockcer,打开WSL 打开后 首先定义GitLab的持久化目录 export GITLAB_HOME=/srv/gitlab 然后运行安装GitLab的命令

知无涯 4490

android gridview 图片错位,Android 中ListView和GridView赋值错位

ListView和GridView多次调用getView的bug,导致赋值错位最近总遇到写GridView适配器赋值时,最后一两个需定义其他图片时,赋图错误,原因就是适配器的getView多次调用,导致数据赋值错误,上网搜索终于找到解决方案,以此记录下。一.ListView1.原因因为listView一般用的是wrap_content,高度不确定,导致系统需要不断地测量,也就多次调用onMeasu...

weixin_32390647的博客 213

基于STM32单片机设计的智能水温控制系统

本项目研究并实现了一种基于STM32单片机的智能水温控制系统。系统以STM32F103RCT6作为主控制器,通过DS18B20温度传感器实时采集水温数据,利用PID控制算法精确调节5V直流防水型70W加热棒的功率输出,确保水温恒定在设定范围内。此外,采用OLED显示屏显示当前水温和预设上限阀值,并集成ESP8266-WiFi模块与自研Android手机APP进行远程通信和控制。用户可通过本地按键或手机APP设置温度阀值,实现实时监控与智能化管理。整个系统设计旨在提高水资源利用效率,提升生活及工业用水环境的舒

8789

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

android listview赋值,Android 中ListView和GridView赋值错位

ListView和GridView多次调用getView的bug,导致赋值错位最近总遇到写GridView适配器赋值时,最后一两个需定义其他图片时,赋图错误,原因就是适配器的getView多次调用,导致数据赋值错误,上网搜索终于找到解决方案,以此记录下。一.ListView1.原因因为listView一般用的是wrap_content,高度不确定,导致系统需要不断地测量,也就多次调用onMeasu...

weixin_33050117的博客 563

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

JAVA中的GridView每一个赋值,Android 中ListView和GridView赋值错位

ListView和GridView多次调用getView的bug,导致赋值错位最近总遇到写GridView适配器赋值时,最后一两个需定义其他图片时,赋图错误,原因就是适配器的getView多次调用,导致数据赋值错误,上网搜索终于找到解决方案,以此记录下。一.ListView1.原因因为listView一般用的是wrap_content,高度不确定,导致系统需要不断地测量,也就多次调用onMeasu...

weixin_34460466的博客 128

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Android ListView,GridView,RecyclerView图片加载错位闪动问题解决办法

问题的根源还是控件的复用以及异步加载所引起的问题 解决思路: 1.使用缓存,从缓存中加载的速度大大少于从网络加载 2.设置默认图片,当一个item设置个图片然后被复用,而当前显示的图片还没有数据,正在从网络获取,这个时候此item就会显示复用前显示的图片,而当前应该显示的图片从网络中获取到之后就会重新加载上去就出现的图片闪动的情况 3.给ImageView设置TAG我封装了一个类来进行网络获

武凯凯 2469

android 之 ListView 里面嵌套 GridView 遇到的问题及其解决方法。

我们直接入主题。所有问题例子请参照下图     1,怎样使图片具有点击事件? 答:      解决方法:      在你的BaseAdapter里面不要设置下面这三个东西,然后再设置GridView的onItemClick。      gridView.setClickable(false);       gridView.setPressed(false);       g...

weixin_33670786的博客 317

ListView,GridView等内容显示错位错乱问题

ListView,GridView等控件需要显示更为丰富的内容时,需要自定义适配器,一般是继承ArrayAdapter。 自定义的Adapter有时会遇见内容显示错位错乱等奇怪问题。 根据具体问题可以尝试以下几种办法解决: 1.一时隐藏的内容设置Invisible,设置Gone的话可能会造成数据显示不准确。 不需要隐藏的内容设置Visible。 2.内容错位如果使用的是L

实现红萝卜的梦想 3508

ListView 里面嵌套 GridView 遇到的问题及其解决方法。

我们直接入主题。所有问题例子请参照下图 1,怎样使图片具有点击事件? 答: 解决方法: 在你的BaseAdapter里面不要设置下面这三个东西,然后再设置GridView的onItemClick。 gridView.setClickable(false); gridView.setPressed(false); gr...

weixin_33991418的博客 247

使用ListView应该注意的地方

android:clipToPadding和android:clipChildren http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0317/2613.html 解决listview addheader EditText焦点问题 android:transcriptMode="nor...

weixin_30279751的博客 99

Android-GridView 实例(异步加载,LruCache缓存,图片请求,图片压缩)

1.回顾    上篇 学习了,关于 异步任务的知识; 2.重点    (1)GridView Adapter实现    (2)LruCache 缓存实现    (3)异步加载 Thread + Handler 实现 3.效果图     4.GridAdapter实现     Adapter的实现不解释,前面用了很多了;     注意:耗时操作不能放在 getView 中

原小明 2061

BitmapFun使用与深入学习

转载请注明出处:http://blog.youkuaiyun.com/evan_man/article/details/51347340背景介绍    根据Android开发文档的说明:每个应用程序会获得至少16MB的独立内存空间;因此要确保自己的图片加载程序在16MB的情况下依然能运转起来。在ListView、Gridview、RecyclerView中图片加载存在的问题有图片显示错位无法确保所有的异步任务

evan_man的专栏 2633

android应用开发中的图片缓存系统

此文产生的原因:1.在开发android应用的时候,往往因图片

Android 917
上一篇: Android 读取SD卡指定后缀的所有文件
下一篇: Android view手势拖动和缩放
CoderYue
博客等级 码龄11年 201粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值