ListView 在滚动期间更改项目

2023-11-22

我正在使用自定义 ArrayAdapter 来实现 ListFragment 来填充列表。每个行项目都有一个 ImageView 和三个 TextView。数据通过 XML 进行解析,图像进行异步加载。

我遇到的问题是 ListView 填充并且看起来不错,但滚动时出现问题。我可以同时在屏幕上显示 7 个项目。当我滚动到第 8 行时,它突然发生变化,因此应该出现下一行。它仅对可被 8 整除的行(即第 8、16、24 行等)执行此操作。

我使用 ViewHolder 模式来确保此 ListView 的良好速度。我认为问题出在某个地方,但我已经四处搜索,看来我正在正确地执行此模式,并且我已经没有足够的东西来检查以解决此问题。我究竟做错了什么?谢谢!

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    MyViewHolder holder;
    if (row == null) {
        LayoutInflater inflater = LayoutInflater.from(mContext);
        row = inflater.inflate(R.layout.browse_result_list_item, null, false);
        holder = new MyViewHolder();
        holder.adTitle = (TextView) row.findViewById(R.id.adTitle);
        holder.region = (TextView) row.findViewById(R.id.region);
        holder.time = (TextView) row.findViewById(R.id.time);
        holder.thumbnail = (ImageView) row.findViewById(R.id.browseThumbnail);
        row.setTag(holder);
    } else {
        holder = (MyViewHolder) row.getTag();
    }
    SearchResult result = mObjects.get(position);

    holder.adTitle.setText(result.getTitle().substring(0, result.getTitle().length()-3)); // three ... at the end, remove them
    holder.region.setText(result.getRegion());
    holder.time.setText(result.getPostingTime());

    // Download the image thumbnail
    ArrayList<String> urls = result.getImageUrls();
    if (urls.size() > 0)
        download(urls.get(0), holder.thumbnail);
    else // No image for this post, put a placeholder
        holder.thumbnail.setImageResource(R.drawable.ic_action_picture);

    return row;
}

private static class MyViewHolder {
    public static TextView adTitle;
    public static TextView region;
    public static TextView time;
    public static ImageView thumbnail;
}

Edit:我找到了solution感谢@frozenkoi。最终是 ViewHolder 内的静态变量导致了问题。它们现在只是公开的,类是静态的,问题已经解决了。


首先定义在getView()方法进入convertView=null;并评论else在此方法中条件并添加int type = getItemViewType(position);. 还从每个视图项中删除静态关键字,例如Textview, ImageView在 ViewHolder 类中。

注意:重写 getViewTypeCount() 和 getItemViewType() 适配器。

if(convertView == null){
 switch (type) {
            case 0:
                  //First view[Row layout]
            break;
            case 1:
                 //Second view[Row layout]
            break;

            //another Case here....

   convertView.setTag(holder);

  //remove else part when used convertView =null;
        /*else {
        holder = (MyViewHolder) row.getTag();
    }*/

} 

@Override
    public int getItemViewType(int position) {
        // TODO Auto-generated method stub
        map = list.get(position); 
        message_type = map.get("message_type");
        if (message_type.equalsIgnoreCase("TEXT")) {
            return 0;
        } else {
            return 1;
        }

    }

    @Override
    public int getViewTypeCount() {
        // TODO Auto-generated method stub
        if (getCount() != 0)
            return getCount();
        return 2;
    }

现在做! 完毕!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ListView 在滚动期间更改项目 的相关文章

  • 是否可以在图片上叠加图标

    我正在创建一个允许用户上传图片的应用程序 当图片上传成功后 我想在右上角添加一个绿色的勾号 可绘制 失败时也一样 但有一个十字 Atm 我正在使用 Glide 在屏幕上显示 URI 我怎样才能做到这一点 您可以通过调用 glide 侦听器来
  • 如何在 Android 应用程序中每天重复一个操作?

    我每天都想重复一个动作 即使应用程序未运行或设备已重新启动 重新启动 它也必须继续工作 在我的代码中 我尝试每 1 分钟显示一条 TOAST 消息 作为测试 它在模拟器中工作正常 但在真实设备上不起作用 我尝试对修复进行一些更改 正如我在一
  • 在flutter中跟踪背景位置时使用background_locator插件时出现问题

    我正在尝试使用 flutter 跟踪后台位置 为此我正在使用背景定位器 https pub dev packages background locator插入 它的实现方式是注册某些静态回调函数 我声明了一个 File 类型的类变量来在后台
  • 带 html 表格的 TextView

    我有个问题 我想放入 TextView html 格式文本 我添加如下
  • 如何将数据从当前活动传递到暂停的活动?

    我想知道如何将数据从当前活动传递到暂停的活动 请指教 我们将暂停的活动称为 A 将 当前 活动称为 B 让 B 将结果传达给 A 的方法是 A 调用startActivityForResult 代替startActivity 并供 B 使用
  • 在Graphview android的LineGraphSeries中的两个系列之间填充颜色

    I have created a line graph using GraphView demo But I need to fill the areas only between the lines with a specific col
  • 如何在 Android 中动态添加新的 Android 芯片?

    我有一个名为 Question 的类 其中包含标签的字符串数组 我试图使用 Kotlin 显示 Recyclerview 中的每个问题以及新芯片中的每个标签 这些芯片将包含在一个 ChipGroup 中 我的问题是 如何将数组的每个标签元素
  • 如何将字节数组转换为图像 [kotlin]

    我想将字节数组转换为图像并在图像视图中显示它 但不知道该怎么做 有人可以指导我吗 我使用这个函数将位图转换为字节数组 private fun BitmapToByteArray ByteArray val stream ByteArrayO
  • 如何使用 Unity 在 Android 设备上以各种宽高比显示游戏的相同部分?

    我从 Libgdx 引擎转向 Unity 是一名初级程序员 我尝试在 Unity 中为 Android 和 iOS 设备制作游戏 但在宽高比 分辨率缩放方面遇到问题 在 Libgdx 中 如果您开发了一些东西 您可以指定 默认 分辨率 并且
  • MaterialComponents 中 AppCompat.Button.Borderless 的替代品是什么?

    由于我的项目中的一些需求 我必须使用MaterialComponents 所以我以前的UI变得混乱 我需要改变它 上一张带有 AppCompat 的图片 带有 MaterialComponents 的新图像 Code 主要款式
  • 安装后隐藏 Android 应用程序图标

    我看到谷歌应用程序中有一些GPS应用程序 安装后 该应用程序将没有图标显示 但会在后台运行服务 我将如何实现这一目标 要从启动器中删除应用程序 请不要将这些行与主要活动放在AndroidManifest xml
  • 如何加密和解密Android SD卡中的文件夹

    是否可以加密 SD 卡文件夹 请帮助我 如果可以的话 加密和解密的处理器是什么 不可能 让我知道我可以为 android SDcard 中的文件夹安全做些什么 我的文件在这里 mnt sdcard image1 jpeg 那么如何在andr
  • Android:CellID 不适用于所有运营商?

    当我请求 Cell ID 和 LAC 信息时 在某些设备上我无法检索它们 我使用这段代码 TelephonyManager tm TelephonyManager getSystemService Context TELEPHONY SER
  • 如何获取与 TextView 关联的字符串资源的 id?

    我可以访问 TextView 实例 获取它的资源 ID 并通过以下方式获取它的资源名称getResources getResourceEntryName 但我似乎找不到一种方法来获取与其关联的字符串的 id 如何动态获取与 TextView
  • 不要保留活动 - 这样做的目的是什么?

    标题是非常不言自明的 我明白这个开发者选项的作用 What I 不明白有以下几点 首先为什么要引入这个选项 经过这些年来该框架经历了所有的变化 它仍然有用吗 我很想知道这个选择背后的原因 我相信这是一个用于调试目的的功能 来自钛文档 htt
  • Android mediacontroller 播放暂停控件无法正确刷新

    我在我的活动中使用了 MediaController 它工作正常 但是当我第一次播放视频时 应该有 b 可见的暂停按钮 但相反 有播放 当我按下该按钮时 视频会正确暂停 状态保持不变 之后它工作正常 视频完成时也会发生同样的事情 这是一个错
  • 找不到导航对象。您的组件是否位于导航器屏幕内?

    在我下面的代码中 当我使用 useNavigation 时 它会给出像我的问题一样的错误 如何使用useNavigation 请任何人都可以解决此错误 错误 找不到导航对象 您的组件是否位于导航器屏幕内 我从这里跟踪了代码https rnf
  • 随机关闭应用程序 - InputManagerService:收到 RemoteException 发送 setActive(false) 通知

    我有一个非常简单的Android应用程序 类似于手指画应用程序 我是 用手指在屏幕上画一些线条 我的问题是 应用程序随机关闭自己 让我回到 安卓主屏幕 我在 LogCat 上能看到的唯一日志就是这一行 Warning Tag InputMa
  • 在 Android 模拟器中更改屏幕亮度

    Android模拟器可以测试屏幕亮度变化吗 我尝试过各种示例 它们都使用以下代码片段 WindowManager LayoutParams lp window getAttributes lp screenBrightness some f
  • sqlite3权限被拒绝android

    我试图直接在 Nexus 上访问我正在开发的应用程序的数据库 但当我尝试执行 sqlite3 命令时 我收到 权限被拒绝 的消息 我还尝试在 root mod 中启动 adb 但再次 设备上的权限被拒绝 我想我必须使用模拟器来做到这一点 但

随机推荐

  • 使用 Beautiful Soup 从“img”标签中提取“src”属性

    考虑 div class someClass a href href img alt some src some a div 我想提取来源 即src 来自图像的属性 即img 使用 Beautiful Soup 标签 我使用 Beautif
  • 如何使用 Python csv reader 循环遍历特定范围的行?

    如何使用 Python csv reader 循环遍历特定范围的行 以下代码循环遍历所有行 with open trainFile rt as csvfile spamreader csv reader csvfile delimiter
  • 使用 openpyxl 或 xl* 或 xlsxwriter 在工作簿中移动工作表?

    我已经阅读了文档 openpyxl xlwt xlrd xlutils XLSX作家 我找不到移动工作表的方法Excel工作簿 测试在末尾添加了一个工作表 具体来说 我有一个日历之类的 JAN FEB DEC 当需要时我需要更换几个月 如果
  • 限制非管理员用户的路由访问

    Goal 我正在尝试为我的登录用户创建管理路由限制 我尝试检查我的用户是否是log in 并且如果用户类型是Admin 如果是 我想允许他们访问管理路由 否则 响应 404 路线 php router gt group middleware
  • RGB888 至 RGB565 / 位移位

    我想使用位移位将三个字符组合成一个短片 这是为了实现 RGB565 调色板 其中 5 位用于红色 6 位用于绿色 5 位用于蓝色 这是我的示例程序 我只是缺少中间的一步 我认为我需要在哪里做一些操作 include
  • Stata有类似Java的try and catch机制吗?

    我正在写一个 do检查一些变量是否存在 dta文件以及检查这些变量的某些值是否存在 但是 我的代码在遇到无效的变量名称时停止执行 我知道我混合了 Java 和 Stata 编码 这是完全不合适的 但是有什么办法我可以做这样的事情 try s
  • Django csrf 请求上下文

    如果我包括 csrf token 在我的表单模板中并在我的视图中导入 RequestContext 我是否必须添加我认为的其他内容 或者是否会考虑 csrf 保护 如下所示 from django shortcuts import rend
  • 带子菜单的纯CSS垂直菜单

    我做了我的研究 并且能够复制我正在寻找的东西 嗯 我只需要一个更具体的垂直 纯 CSS 菜单的帮助 我希望我的子菜单弹出窗口显示在 a 左侧 10 像素处 而不是 a 左侧li属性就像互联网上找到的大多数示例一样 我也在寻找最简单 纯 CS
  • 双 * (splat) 运算符有什么作用

    你见过这样声明的函数吗 def foo a b end 我的理解是单 是 splat 运算符 什么是 mean Ruby 2 0 引入了关键字参数 并且 行为就像 但对于关键字参数 它返回带有键 值对的哈希 对于这段代码 def foo a
  • C# - 具有系统时间意识的 Windows 服务

    我正在考虑编写一个 Windows 服务 该服务将在用户指定的时间打开或关闭某些功能 使用我将提供的配置实用程序 基本上 用户会指定 PC 进入 仅工作 模式 阻止 Facebook 和其他分散注意力的网站 的特定时间 然后当这些时间到时
  • 在 C# 中使用 Linq 进行字符串替换

    public class Abbreviation public string ShortName get set public string LongName get set 我有一个缩写对象列表 如下所示 List abbreviati
  • 如何在 Objective-C 中旋转 UIButton 和 UILabel 的文本?

    如何旋转文本UIButton and UILabel 90度 180度 yourlabelname setTransform CGAffineTransformMakeRotation M PI 2 rotated image pervio
  • CSS:根据后备字体设置字体粗细

    我正在尝试根据选择的字体设置元素的字体粗细 例如 我可能正在尝试做这样的事情 h1 font family Arial Narrow Impact sans serif font weight 假设如果用户的系统上安装了 Arial Nar
  • 将 C99 代码转换为 C89

    如何将c99源代码自动转换为c89 我想用Visual C 编译c99库 但MSVC只支持c89 许多更改只是语法上的 例如结构初始值设定项 您可以编写一个工具来自动 de c99 代码 这个预处理器存在吗 基于 Clang 的源到源转换器
  • 如何使用 php 检查 $_GET['id'] 是否已设置且不为空

    这是一段php代码 if isset GET id do something else redirect index php redirect is a function 现在 如果设置了 id 例如 index php id 12 则执行
  • 在 MATLAB 中显示 CPU 内核利用率

    无论如何 任何功能等 都要显示CPU cores utilization in MATLAB in a GUI喜欢我们的Task Manager窗口 性能选项卡 Thanks 据我所知 没有任何 Matlab 函数可以在进程使用级别访问系统
  • 鼠标焦点没有轮廓,但键盘焦点仍有轮廓?

    当页面的元素获得焦点 例如链接或按钮 时 它们会显示轮廓 我希望此轮廓仅在键盘 而不是鼠标 赋予该元素焦点时显示 是否可以通过 JavaScript 确定该元素如何获得焦点 如果是这样 我如何控制浏览器自己的大纲功能 浏览器使用CSSout
  • 无法在 php 中解码 JSON 字符串

    我有以下 JSON 字符串 我尝试使用 php json decode 但 postarray 进行解码 总是 NULL 不明白这是为什么 在 Debian 5 0 Linux 上运行 php 客户端 API 版本 gt 5 0 51a J
  • 如何使用更短的名称调用 Perl 类?

    我正在编写一个 Perl 模块Galaxy SGE MakeJobSH与面向对象 我想用MakeJobSH gt new 代替Galaxy SGE MakeJobSH gt new 或其他一些简称 我怎样才能做到这一点 您可以建议您的用户使
  • ListView 在滚动期间更改项目

    我正在使用自定义 ArrayAdapter 来实现 ListFragment 来填充列表 每个行项目都有一个 ImageView 和三个 TextView 数据通过 XML 进行解析 图像进行异步加载 我遇到的问题是 ListView 填充