recyclerview 中的倒计时器无法正常工作

2023-11-24

我创建了一个包含多个数据和一个倒计时器的回收视图。所有的事情都工作正常,直到我无法滚动列表。当我向下滚动列表时,倒计时器将与上面的视图项目冲突。它也计算当前观看时间和随机时间。我尝试了太多的方法来解决它,但无法解决。请帮帮我。提前致谢 。

这是我的 RecyclerAdapter 的代码。

public class ReferendumQuestionAdapter extends RecyclerView.Adapter<ReferendumQuestionAdapter.MyViewHolder> {

List<QuestionsModel.QuestionsData> questionBeen = new ArrayList<>();
List<QuestionsModel.LikedImages> likedImagesList = new ArrayList<>();
Activity activity;
boolean channerlView = false;
OnViewClick onViewClick ;

AppPreference preference;
CustomDialog customDialog;
AdminAPI adminAPI;


ReferendumImagesAdapter imagesRecycleViewAdapter;
List<CommentModel.GetCommentData> commentDataList = new ArrayList<>();
CommentViewAdapter commentViewAdapter;

public ReferendumQuestionAdapter(List<QuestionsModel.QuestionsData> questionBeen, Activity activity, boolean channerlView , OnViewClick onViewClick) {
    this.questionBeen = questionBeen;
    this.activity = activity;
    this.channerlView = channerlView;
    this.onViewClick = onViewClick ;
    this.preference = new AppPreference(activity);
    this.customDialog = new CustomDialog(activity);
    this.adminAPI = ServiceGenerator.getAPIClass();
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.layout_referendum_question, parent, false);
    return new MyViewHolder(itemView);
}

@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {

    holder.txtQuestion.setText(questionBeen.get(position).getRef_question());
    holder.txt_channelName.setText(questionBeen.get(position).getPost_by());
    holder.txt_userName.setText(questionBeen.get(position).getNews_channel_name());

    holder.txt_views.setText(questionBeen.get(position).getTotal_view() + " View  ");
    holder.txt_comments.setText(questionBeen.get(position).getTotal_comment() + " Comment");
    holder.txt_referendums.setText(questionBeen.get(position).getTotal_like() + " Referendum ");


    String getUserName = holder.txt_userName.getText().toString().trim();
    if(getUserName==null || getUserName.isEmpty()){
        holder.txt_userName.setVisibility(View.GONE);
    }


    String channelImageURL = questionBeen.get(position).getPost_user_image();
    Glide.with(activity)
            .load(ApiURLs.IMAGE_URL + channelImageURL)
            .error(R.drawable.noimagefound)
            .into(holder.imgChannel);


    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
    String startDateTime = questionBeen.get(position).getCurrent_date_time();
    String endDateTime = questionBeen.get(position).getEnd_date_time();
    Date startDate = null, endDate = null;
    try {
        startDate = simpleDateFormat.parse(startDateTime);
        endDate = simpleDateFormat.parse(endDateTime);

    } catch (ParseException e) {
        e.printStackTrace();
    }

    long start_millis = startDate.getTime();
    long end_millis = endDate.getTime();
    long total_millis = (end_millis - start_millis);

    Log.e("checkTime" , "-->" + total_millis);

    CountDownTimer cdt = new CountDownTimer(total_millis, 1000) {
        @Override
        public void onTick(long millisUntilFinished) {
            long days = TimeUnit.MILLISECONDS.toDays(millisUntilFinished);
            millisUntilFinished -= TimeUnit.DAYS.toMillis(days);

            long hours = TimeUnit.MILLISECONDS.toHours(millisUntilFinished);
            millisUntilFinished -= TimeUnit.HOURS.toMillis(hours);

            long minutes = TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished);
            millisUntilFinished -= TimeUnit.MINUTES.toMillis(minutes);

            long seconds = TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished);

            holder.txtTime.setText(" " + days + " D: " + hours + " H: " + minutes + " M: " + seconds + " S  ");
        }

        @Override
        public void onFinish() {
            holder.txtTime.setText("Finish!");
            onViewClick.onClick(position);
        }
    };
    cdt.start();
}
@Override
public int getItemCount() {
    return questionBeen.size();
}

public class MyViewHolder extends RecyclerView.ViewHolder {

    RecyclerView questionRecycle;
    TextView txtQuestion, txtTime, txt_content, txt_userName, txt_totalComment, txt_submitComment, txt_channelName , txt_views , txt_referendums  ,txt_comments;
    ImageView imgShare, imgChannel;
    EditText edt_comment;

    public MyViewHolder(View itemView) {
        super(itemView);
        questionRecycle = (RecyclerView) itemView.findViewById(R.id.recyclerview_images);
        txtQuestion = (TextView) itemView.findViewById(R.id.txt_question);
        txtTime = (TextView) itemView.findViewById(R.id.txt_time);
        txt_content = (TextView) itemView.findViewById(R.id.txt_content);
        txt_userName = (TextView) itemView.findViewById(R.id.txt_userName);
        txt_totalComment = (TextView) itemView.findViewById(R.id.txt_totalComment);
        txt_submitComment = (TextView) itemView.findViewById(R.id.txt_submitComment);
        txt_channelName = (TextView) itemView.findViewById(R.id.txt_channelName);
        txt_views = (TextView) itemView.findViewById(R.id.txt_views);
        txt_referendums = (TextView) itemView.findViewById(R.id.txt_referendums);
        txt_comments = (TextView) itemView.findViewById(R.id.txt_comments);
        imgShare = (ImageView) itemView.findViewById(R.id.img_share);
        imgChannel = (ImageView) itemView.findViewById(R.id.img_channel);
        edt_comment = (EditText) itemView.findViewById(R.id.edt_comment);

    }
}

public interface OnViewClick {
    void onClick(int position);
}

问题是对于每一个onBindViewHolder打电话给你正在创建一个新的CountDownTimer并更新ViewHolder。所以在几次滚动之后,多个CountDownTimer将尝试更新相同的ViewHolder.

只创建一个CountDownTimer per ViewHolder。为此,请取消CountDownTimer通过致电.cancel();在设置新的之前CountDownTimer on the ViewHolder.

为了访问CountDownTimer已经设置在ViewHolder,创建它onCreateViewHolder并把它放进去MyViewHolder作为一个字段。

有一个公共方法MyViewHolder打电话说update它执行了您编写的所有过程onBindViewHolder和简单的呼叫更新onBindViewHolder适配器的。 (代码也更干净:))

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

recyclerview 中的倒计时器无法正常工作 的相关文章

  • 如何使用 SharedPreferences 保存多个值?

    我正在开发一个字典应用程序 在我的应用程序中 我假设用户想要保存最喜欢的单词 我决定使用共享首选项保存这些值 我知道 SQLite 和文件更好 但我坚持使用 SharedPreferences 所以继续使用它 下面是我的代码 Overrid
  • 是否可以通过 Android 应用程序来录音?

    我是一名开发人员 希望创建一个 Android 应用程序来记录电话 这是出于我个人的需要 为了我自己的目的和记录而记录电话 是否有可能做到这一点 是否可以访问麦克风以及通过扬声器发出的声音 我对 Android 开发有点陌生 所以请耐心等待
  • 如何使用正则表达式验证 1-99 范围?

    我需要验证一些用户输入 以确保输入的数字在 1 99 范围内 含 这些必须是整数 Integer 值 允许前面加 0 但可选 有效值 1 01 10 99 09 无效值 0 007 100 10 5 010 到目前为止 我已经制定了以下正则
  • 添加到列表时有没有办法避免循环?

    我想知道这样的代码 List
  • 如何删除日期对象的亚秒部分

    当 SQL 数据类型为时间戳时 java util Date 存储为 2010 09 03 15 33 22 246 如何在存储记录之前将亚秒设置为零 例如 在本例中为 246 最简单的方法是这样的 long time date getTi
  • Java:如何确定文件所在的驱动器类型?

    Java 是否有一种独立于平台的方法来检测文件所在的驱动器类型 基本上我有兴趣区分 硬盘 可移动驱动器 如 USB 记忆棒 和网络共享 JNI JNA 解决方案不会有帮助 可以假设 Java 7 您可以使用 Java 执行 cmd fsut
  • 寻找局部最小值

    下面的代码正确地找到了数组的局部最大值 但未能找到局部最小值 我已经进行了网络搜索 以找到找到最小值的最佳方法 并且根据这些搜索 我认为我正在使用下面的正确方法 但是 在几天的时间里多次检查每一行之后 下面的代码中有一些我仍然没有看到的错误
  • 如何通过 Android 按钮单击运行单独的应用程序

    我尝试在 Android 应用程序中添加两个按钮 以从单独的两个应用程序订单系统和库存系统中选择一个应用程序 如图所示 我已将这两个应用程序实现为两个单独的 Android 项目 当我尝试运行此应用程序时 它会出现直到正确选择窗口 但是当按
  • Android:GestureDetector 无法与选项卡(TabActivity、Tabwidget)一起工作(gestureDetector.onTouchEvent(event) 始终为 false)

    我已经用不同的子活动实现了 TabActivity intent new Intent setClass this MyChildTabActiviy class Initialize a TabSpec for each tab and
  • jetpack compose 是否使用drawable-night 文件夹?

    我们有一个基于视图的 Android 应用程序 其中有一些可绘制对象res drawable文件夹 以及夜间模式的对应文件夹res drawable night folder 使用旧视图时 引用可绘制对象R drawable foo从 XM
  • 如何将样式应用于我拥有的所有 TextView? [复制]

    这个问题在这里已经有答案了 可能的重复 设计所有 TextView 或自定义视图 的样式 而不向每个 TextView 添加样式属性 https stackoverflow com questions 6801890 styling all
  • 如何在android中通过蓝牙向配对设备发送短信?

    在我的应用程序中 我想通过蓝牙发送和接收短信 我可以在列表视图中看到配对设备名称和地址的列表 但是当我尝试向配对设备发送文本时 什么也没有发生 在其他设备中没有收到文本 这是我向配对设备发送消息的代码 private void sendDa
  • 禁用 Android 菜单组

    我尝试使用以下代码禁用菜单组 但它不起作用 菜单项仍然启用 你能告诉我出了什么问题吗 资源 菜单 menu xml menu menu
  • Hadoop NoSuchMethodError apache.commons.cli

    我在用着hadoop 2 7 2我用 IntelliJ 做了一个 MapReduce 工作 在我的工作中 我正在使用apache commons cli 1 3 1我把库放在罐子里 当我在 Hadoop 集群上使用 MapReduceJob
  • 使用 Java https 上传到 Imgur v3 错误

    我目前正在尝试使用他们当前的 API v3 上传到 imgur 但是我不断收到错误 错误 javax net ssl SSLException 证书中的主机名不匹配 api imgur com imgur com OR imgur com
  • ECDH使用Android KeyStore生成私钥

    我正在尝试使用 Android KeyStore Provider 生成的私有文件在 Android 中实现 ECDH public byte ecdh PublicKey otherPubKey throws Exception try
  • 何时在 hibernate 中使用 DiscriminatorValue 注解

    在 hibernate 中使用 DiscriminatorValue 注释的最佳场景是什么以及何时 这两个链接最能帮助我理解继承概念 http docs oracle com javaee 6 tutorial doc bnbqn html
  • 丢失应用程序的密钥库文件(但已启用 Google Play 应用程序签名)

    我已经失去了原来的keystore用于签署我的应用程序的文件 我的应用启用了 Google Play 应用签名 如果我联系 Google 支持人员 是否可以重置密钥 以便我可以继续上传到此包 我希望我可以做到这一点 因为应用程序签名已启用
  • 记录类名、方法名和行号的性能影响

    我正在我的 java 应用程序中实现日志记录 以便我可以调试应用程序投入生产后可能出现的潜在问题 考虑到在这种情况下 人们不会奢侈地使用 IDE 开发工具 以调试模式运行事物或单步执行完整代码 因此在每条消息中记录类名 方法名和行号将非常有
  • 即使调整大小,如何获得屏幕的精确中间位置

    好的 这个问题有两部分 当我做一个JFrame 并在其上画一些东西 即使我将宽度设置为 400 并使其在一个项目击中它时 当然 允许项目宽度 它会反弹回来 但由于某种原因 它总是偏离屏幕约 10 个像素 有没有办法解决这个问题 或者我只需要

随机推荐

  • PowerMockito:使用匹配器模拟静态方法时出现 InvalidUseOfMatchersException

    当我测试这个静态方法时 public class SomeClass public static long someMethod Map map String string Long l Log log with import org ap
  • 将文件保存到选定的目录中(javascript)

    你好 我的问题是关于javascript的 我想要1 要求用户选择一个目录2 然后将我的一堆文件写入其中 可能通过创建子目录 而不与用户交互 我怎样才能做到这一点 我可以吗 我是 javascript 新手 希望得到您的帮助 PS 我听说过
  • 如何使用 Jest 模拟封装在服务类中的 Winston 记录器实例

    我想嘲笑温斯顿记录器封装在使用 NestJS 创建的服务类中的实例 我在下面包含了我的代码 我无法从服务类中触发模拟的记录器实例 谁能解释我哪里出了问题 import as winston from winston import logge
  • Python 翻译多个字符

    我正在尝试在 python 3 3 3 中创建一个程序 它将接受一个字符串 然后将其转换为数字 1 26 我知道如何计算一位数字 但不知道如何计算 2 位数字 translist str maketrans 123456789 ABCDEF
  • 对 WooCommerce 中最便宜的购物车商品应用 100% 优惠券折扣

    我创建了一个 BOGOF 买一送一 优惠券 使用正常的 woocommerce 优惠券方法 该优惠券为用户提供购物车中其他 1 件商品 100 的折扣 优惠券设置 General 折扣类型 百分比折扣优惠券 amount 100 使用限制
  • 使用 Django 模型进行单元测试并涉及很多关系

    或者 如何设计数据库架构以方便进行单元测试 顺便说一句 这里有一个与此非常相似的问题 如何使用外键测试 Django 中的模型 我正在尝试为使用 Django 框架的项目遵循 TDD 方法 我正在创建和测试模型及其功能 保存方法 信号 以及
  • HAVING 不带 GROUP BY

    根据标准 SQL 以下可能吗 为了符合标准 如果还没有 需要进行哪些最小的更改 它在 MySQL 中按预期工作 当且仅当第一行具有最大值页数 SELECT FROM Book HAVING NumberOfPages MAX NumberO
  • 解释 d3js 投影基础知识

    我试图了解 d3 中地理投影的基础知识 以便我可以有效地旋转 缩放和平移坐标 投影的结果是否在默认 svg 坐标系中 原点位于左上角 正 y 值沿网格向下移动 或者结果是笛卡尔坐标系的 正 y 值在网格中向上移动 我进行了这个测试 a点位于
  • Android Studio 1.0RC4 Gradle 构建错误

    我刚刚下载了 Android Studio 1 0RC4 但无法构建任何项目 甚至是新创建的项目 我得到的错误是 错误 无法使用 Gradle 分发运行构建操作 https services gradle org distributions
  • git 归档来自远程的特定哈希

    我正在尝试从一个远程存储库获取一个目录 但我只想从特定的哈希中获取该文件 如果我使用带有 HEAD 的 git archive 一切正常 但是当我尝试使用特定的哈希时 git archive v format tar remote ssh
  • AngularJS:如何从window.history中删除当前视图url?

    I have load data使用微调器查看 数据加载完成后控制器重定向到不同的视图 location path show info 如何从历史记录中删除 load data 以避免window history back 到 load d
  • 如何通过一键登录流程使用适用于 JavaScript 的 Google API 客户端?

    我在用着Google 一键登录对用户进行身份验证 在用户通过身份验证后 我会获得访问令牌 我知道我可以使用此访问令牌来使用JavaScript 的 Google API 客户端 GAPI 但我找不到任何使用此访问令牌来使用 GAPI 的方法
  • Google Play 拒绝应用程序,因为它正在上传用户的联系信息

    由于以下原因 该应用程序已从 Google Play 商店中删除 APK 有显着的披露 但披露不充分您的应用正在上传用户的Contact信息至https domen com没有充分披露 由于应用程序是国际电话应用程序 我们使用了很多权限
  • 互斥锁和解锁函数如何防止 CPU 重新排序?

    据我所知 函数调用充当编译器屏障 但不充当 CPU 屏障 This tutorial说如下 获取锁意味着获取语义 而释放锁 意味着释放语义 其间的所有内存操作都是 包含在一个漂亮的小屏障三明治内 防止任何 跨边界的不良内存重新排序 我假设上
  • devtools roxygen 包创建和 rd 文档

    我是 roxygen 的新手 正在努力了解如何使用它来快速创建新的 自定义的包 IE 我想知道最低要求是制作一个名为package1 using devtools roxygen2 3这样我就可以运行命令 require package1
  • 根据特定类别获取所有标签(包括子类别和帖子中的所有标签)wordpress

    我想在 single php 上使用 wp tag cloud 使用从特定类别获取所有标签的参数 包括来自其子类别和帖子的所有标签 Wordpress 中没有本地方法可以做到这一点 原因是标签与类别无关 它们是独立的 话虽如此 获取特定类别
  • 从 iPhone 应用程序购买实体产品,无需 Apple 在应用程序内购买

    iPhone 应用程序是否可以允许用户从应用程序内部购买实体产品 例如笔或鼠标 而无需在应用程序购买中使用 Apple 苹果允许吗 如果是的话 你知道有什么API支持这个吗 谢谢 阿杰 您不得使用 应用内购买 销售实体商品或服务 因为通过此
  • DatePicker 看起来也像新 API 上的旧设计

    所以问题很简单 我集成了一个DatePicker在我的应用程序中 不作为DialogDatePicker但作为一个 View 组件 更准确地说是一个View里面的一个Fragment动态显示并从FrameLayout包含在我的主要Fragm
  • XML XSD 模式验证工具[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 有人知道使用 XSD 模式验证 XML 的命令行工具吗 xmllint 来自Libxml项目 xmllint schema schema xsd d
  • recyclerview 中的倒计时器无法正常工作

    我创建了一个包含多个数据和一个倒计时器的回收视图 所有的事情都工作正常 直到我无法滚动列表 当我向下滚动列表时 倒计时器将与上面的视图项目冲突 它也计算当前观看时间和随机时间 我尝试了太多的方法来解决它 但无法解决 请帮帮我 提前致谢 这是