单击 RecyclerView 内的 ImageView 时更改图像资源

2024-05-17

每当我单击它时(单击图像,而不是项目),我都会尝试更改回收器视图内特定位置的设备图像资源。我尝试将 setOnClickListener() 放入 onBindViewHolder() 方法中,但只有最后一个项目受到影响。这是我的回收者视图 https://i.stack.imgur.com/DTBoH.png

这是我的适配器:

public class Device_RV_Adapter extends RecyclerView.Adapter<Device_View_Holder> {

List<Device_Data> list= Collections.emptyList();
Context context;

public Device_RV_Adapter(List<Device_Data> list,Context context){
    this.list=list;
    this.context = context;
}
@Override
public Device_View_Holder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.device_row_layout,parent,false);
    Device_View_Holder holder = new Device_View_Holder(v);
    return holder;
}

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

    holder.device_id.setText(list.get(position).device_id);
    holder.home.setText(list.get(position).home_id);
    holder.room.setText(list.get(position).room);
    holder.current.setText(list.get(position).current);
    holder.switch_key.setImageResource(list.get(position).switch_key);
    holder.device.setTag(position);
    holder.device.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            int pos = (int)v.getTag();
            if(list.get(pos).flag==true){
                list.get(pos).flag = false;
            }
            else if(list.get(pos).flag==false){
                list.get(pos).flag = true;
            }
            notifyDataSetChanged();
        }

    });

    if(list.get(position).flag == true)
        holder.device.setImageResource(R.drawable.fan_off);
    else if(list.get(position).flag==false)
        holder.device.setImageResource(R.drawable.fan_on);
}

@Override
public int getItemCount() {
    return list.size();
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView){
    super.onAttachedToRecyclerView(recyclerView);
}
public void insert(int position,Device_Data device_data){
    list.add(position,device_data);
    notifyItemInserted(position);
}
public void remove(Device_Data device_data){
    int position = list.indexOf(device_data);
    list.remove(position);
    notifyItemRemoved(position);
}

我的浏览者:

public class Device_View_Holder extends RecyclerView.ViewHolder{

CardView cv;
TextView device_id,home,room,current;
public static ImageView device, switch_key;
boolean flag;
public Device_View_Holder(View itemView) {
    super(itemView);
    cv=(CardView)itemView.findViewById(R.id.device_cv);
    device_id=(TextView)itemView.findViewById(R.id.device_id);
    home=(TextView)itemView.findViewById(R.id.home_id);
    room=(TextView)itemView.findViewById(R.id.room);
    current=(TextView)itemView.findViewById(R.id.current);
    device=(ImageView)itemView.findViewById(R.id.device_img);
    switch_key=(ImageView)itemView.findViewById(R.id.switch_key);
}

我的数据类:

public class Device_Data {
public String device_id,home_id,room,current;
public int device,switch_key;
boolean flag;
public Device_Data(String device_id, String home_id, String room, String current,int device,int switch_key,boolean flag){
    this.device_id=device_id;
    this.home_id=home_id;
    this.room=room;
    this.current=current;
    this.device=device;
    this.switch_key=switch_key;
    this.flag=flag;
}

当我单击设备的图像时,如果它处于打开状态(flag=true),则更改为“fan_off”。如果关闭,请更改为“fan_on”。就像一个开关一样。任何人都可以帮助我解决这种情况吗?提前致谢...


首先,内部不需要 for 循环onBindViewHolder(),因为此方法是为列表中的所有项目调用的,并且您不必再次为所有项目显式运行循环。

替换这段代码:

for(int i=0;i<list.size();i++){
        if(position==i){
                holder.device.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if(list.get(position).flag==true)
                            holder.device.setImageResource(R.drawable.fan_off);
                        else if(list.get(position).flag==false){
                            holder.device.setImageResource(R.drawable.fan_on);
                        }
                    }
                });
            }
    }

有了这个:

// here setTag is used to attach the position with each view being inflated.

holder.device.setTag(position);
holder.device.setOnClickListener(new View.OnClickListener() {

      @Override
      public void onClick(View v) {
        int pos = (int)v.getTag();
        if(list.get(pos).flag==true){
           list.get(pos).flag = false;
          }
        else{
           list.get(pos).flag = true;
          }
     notifyDataSetChanged();
      }

   });

 if(list.get(position).flag == true)
    holder.device.setImageResource(R.drawable.fan_off);
 else
    holder.device.setImageResource(R.drawable.fan_on);

我们在这里检查标志是 true 还是 false,并且当用户单击按钮时,相应地更改值,以便在调用 notificationDataSetChanged() 时,它会使用新更改的标志值填充视图,从而选择或取消选择相关视图。

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

单击 RecyclerView 内的 ImageView 时更改图像资源 的相关文章

  • 如何在 Android 上的 HttpPost 中发送 unicode 字符

    我试图在我的应用程序中允许多语言支持 这会发出 HTTP post 来上传新消息 我需要做什么才能支持日语和其他非拉丁语语言 我的代码目前看起来像这样 note the msg string is a JSON message by the
  • 参数动态时如何构建 JPQL 查询?

    我想知道是否有一个好的解决方案来构建基于过滤器的 JPQL 查询 我的查询太 富有表现力 我无法使用 Criteria 就像是 query Select from Ent if parameter null query WHERE fiel
  • Android:如何监控WiFi信号强度

    当信号强度发生变化时我会收到通知 我尝试创建以下方法并在 onCreate 中调用它 private void initializeWiFiListener Log i TAG executing initializeWiFiListene
  • 从 Java 日历迁移到 Joda 日期时间

    以前 当我第一次设计股票应用相关软件时 我决定使用java util Date表示股票的日期 时间信息 后来我体会到了大部分方法java util Date已弃用 因此 很快 我重构了所有代码以利用java util Calendar 然而
  • 让JScrollPane控制多个组件

    对于我的应用程序 我正在设计一个脚本编辑器 目前我有一个JPanel其中包含另一个JPanel保存行号 位于左侧 以及JTextArea用于允许用户输入代码 位于右侧 目前 我已经实施了JScrollPane on the JTextAre
  • 在 AKKA 中,对主管调用 shutdown 是否会停止其监督的所有参与者?

    假设我有一位主管连接了 2 位演员 当我的应用程序关闭时 我想优雅地关闭这些参与者 调用supervisor shutdown 是否会停止所有参与者 还是我仍然需要手动停止我的参与者 gracias 阻止主管 https github co
  • 如何在android中录制音频时暂停背景音乐

    我正在 Android 中开发一个音频记录应用程序 因此 如果设备音乐播放器中已播放任何背景音乐 则应在开始录制之前暂停该背景音乐 并且每当录制停止或暂停时 背景音乐都应恢复 播放录制的音频时也应该如此 有人可以帮我解决这个问题吗 提前致谢
  • 如何在 WebView 中添加 JavaScript 函数并稍后在提交 reCAPTCHA 时从 HTML 调用它

    我在 WebView 中添加一个 JavaScript 函数 如下所示 Kotlin val webView findViewById R id webview as WebView webView getSettings setJavaS
  • Android:如何使视图增长以填充可用空间?

    这看起来很简单 但我不知道该怎么做 我有一个带有 EditText 和两个 ImageButtons 的水平布局 我希望 ImageButtons 具有固定大小 并且 EditText 占据布局中的剩余空间 如何才能做到这一点
  • 如何在keycloak中动态编辑standalone.xml文件

    我正在尝试通过 docker 编辑standalone xml 并尝试添加 但 keycloak 正在使用它standalone xml 但我可以看到standalone xml 文件中的更改 我需要在standalone xml 文件中添
  • ExceptionHandler 不适用于 Throwable

    我们的应用程序是基于 Spring MVC 的 REST 应用程序 我正在尝试使用 ExceptionHandler 注释来处理所有错误和异常 I have ExceptionHandler Throwable class public R
  • Android:单一活动,多个视图

    我不是 Android 专业人士 尽管我开发了一个包含 50 多个活动的应用程序 这使得该应用程序非常庞大 经过8周的开发 现在出现了一些问题 导致应用程序难以维护和升级 我正在处理的主要问题是 我无法将对象引用传递给活动的构造函数 事实上
  • 如何在android sdk上使用PowerMock

    我想为我的 android 项目编写一些单元测试和仪器测试 然而 我遇到了一个困扰我一段时间的问题 我需要模拟静态方法并伪造返回值来测试项目 经过一些论坛的调查 唯一的方法是使用PowerMock来模拟静态方法 这是我的 gradle 的一
  • 如何使 tablayout 文本大小相等?

    这就是我所做的 我为文本创建了一种样式
  • 从一个文本文件中获取数据并将其移动到新的文本文件

    我有一个文件 里面有数据 在我的主要方法中 我读入文件并关闭文件 我调用另一种方法 在原始文件的同一文件夹内创建一个新文件 所以现在我有两个文件 原始文件和通过我调用的方法生成的文件 我需要另一种方法 从原始文件中获取数据并将其写入创建的新
  • 为什么 BufferedWriter 不写入文件?

    我有这个代码 String strings Hi You He They Tetrabenzene Caaorine Calorine File file new File G words txt FileWriter fWriter Bu
  • gradle-experimental:0.1.0 buildConfigField

    谁知道怎么定义buildConfigField在实验性的 gradle 插件中 android productFlavors create demo applicationId com anthonymandra rawdroid buil
  • Spring Boot MSSQL Kerberos 身份验证

    目前在我的春季靴子中application properties文件中 我指定以下行来连接到 MSSql 服务器 spring datasource url jdbc sqlserver localhost databaseName spr
  • Java 推断泛型类型

    我正在寻找类似的推断捕获泛型类型的概念 类似于以下方法片段 但不是捕获泛型类型的类 public
  • 在 Android 中更新到 API 26 时,清单合并失败并出现多个错误

    我尝试使用 API 26 更新我的 gradle 安卓工作室2 3 3 但我在编译项目时遇到以下错误 这是我收到的错误的屏幕截图 应用级别build gradle Top level build file where you can add

随机推荐

  • 生成二叉树的所有从根到叶的分支

    抱歉 如果这是一个常见问题 但我还没有找到适合我的特定问题的答案 我正在尝试实施一个walk方法将二叉树从根节点遍历到每个叶节点 每当到达叶节点时都会生成根到叶路径 例如 遍历表示为的二叉树 a b d c 会产生 a b c a d 我的
  • 如何使用 Apex 在 SalesForce 中以编程方式访问报告

    我正在尝试在 SalesForce 平台上编写一个应用程序 该应用程序可以从报告中提取联系人列表并将其发送到网络服务 例如向他们发送电子邮件或短信 我似乎找到执行此操作的唯一方法是将报告结果添加到新创建的活动中 然后访问该活动 这似乎是一条
  • Python:结构体和数组与 ctypes 中的类似功能

    Python 提供了以下三个处理 C 类型以及如何处理它们的模块 struct https docs python org 3 library struct html对于 C 结构体 array https docs python org
  • Qml 模块未找到 CPP 类注册与新的 QML_ELEMENT r

    我尝试使用 Qt5 15 0 和新宏 QML ELEMENT 在 QML 中注册我的自定义 CPP 类 但找不到该模块 Qt Creater 帮助文件描述了 QML ELEMENT 的步骤 我也检查了 Qt 手册 但没有幸福的结局 http
  • 用户未定义的方法 attr_accessible 错误

    我正在尝试创建某种登录 我创建了一个用户脚手架并将此代码放在我的 user rb 中 class User lt ActiveRecord Base attr accessible name password digest password
  • 将 Python 字典与包含的浮点值进行比较

    我想比较一对字典并使用 模糊 浮点比较或更好地使用numpy allclose 这样做 但是 使用默认的 or Python 中的 dicts 不会这样做 我想知道是否有办法改变浮点比较操作 可能使用上下文管理器进行安全清理 我相信一个例子
  • 为什么拉丁文小写字母 DOTLESS I(结合上面的点)没有在 NFC 形式中标准化为“i”?

    Python 中的示例 gt gt gt s gt gt gt len s 2 gt gt gt list s gt gt gt print join map unicodedata name s LATIN SMALL LETTER DO
  • 给定一个具有多个重复条目的数组,找到一个重复条目 O(N) 时间和常数空间

    我们得到了一个大小为 N 的数组 其中包含 0 到 N 2 范围内的整数 包括 0 和 N 2 该数组可以有多个重复的条目 我们需要在 O N 时间和常量空间中找到重复条目之一 我正在考虑取数组中所有条目的乘积和总和 以及 0 到 N 2
  • 在docker中,存储驱动程序和支持文件系统有何不同?

    The docker info命令列出两个存储驱动程序 例如设备映射器和支持文件系统 例如XFS 这两个属性的含义是什么 它们有何不同 存储驱动程序 是docker用来管理存储的软件组件 这可能是其中之一overlay驱动程序 它使用ove
  • 将文件夹中的所有文件及其所有子文件夹移动到一个大文件夹中 - windows xp

    我有一个文件夹 c downloads ffme 里面有很多子文件夹 每个子文件夹中都有不同数量的文件 我想将所有这些单独的文件合并到一个大文件夹中 同时将它们从子文件夹中删除 我希望最终得到一个包含大量文件的文件夹 但没有子文件夹 我怎样
  • 启动 jboss 服务器时出错

    我刚刚完成重新安装我的操作系统 并像往常一样安装和测试我使用的标准工具 现在当我尝试从 eclipse 启动 Jboss 5 时 我遇到了这个前所未有的错误 这是一个很大的例外 3 53 10 693 ERROR AbstractKerne
  • 如何修复 TypeError: G 必须是 'd' 矩阵?

    目标 尝试通过优化过程运行玩具数据集 我遇到以下错误 TypeError Traceback most recent call last
  • jQuery 位置 DIV 固定在滚动顶部

    我有一个相当长的页面 在布局的菜单中 有一个弹出菜单 我希望菜单的弹出部分显示在页面顶部 即使用户已将菜单栏滚动到视图之外 这是菜单的 HTML div div Compare up to 3 cards side by side Clic
  • node.js通过aws-sdk模块重命名s3对象

    是否可以通过重命名 s3 上的对象aws sdk https www npmjs com package aws sdk 我找不到解决方法 也许有一个临时解决方案 我想我会回答 因为没有人回答过 这个应该有用 create a new s3
  • 实体框架 - 外键上的双向一对一关系

    我有两个实体 例如 Hat 和 Owner Owner Hat 0 1 1 ID ID Name Size HatId OwnerId 每个主人都有他的帽子 有些帽子没有主人 我创建了模型 public class Owner Key pu
  • 文件正被另一个进程使用。原因,以及解决办法?

    该进程无法访问该文件 abc log 因为它正在被使用 另一个过程 你好 我偶尔在我的应用程序中看到这个异常 但我仍在尝试修复它 希望我能从 stackoverflow 中获得一些见解 在我的应用程序中 我定义了一个 WriteToLog
  • 代号一 - 正确使用选择器

    我试图对选择器的使用提出一个明确的问题 因为我之前的问题不够清楚 代号一 Picker 的 addActionListener https stackoverflow com questions 48758348 codename one
  • 类方法作为构造函数和继承

    问题很简单 如果一个班B继承一个类A并想要重写用作构造函数的 类方法 我猜你称其为 工厂方法 问题是B classmethod会想要重复使用A classmethod 但随后它必须创建类 A 的实例 同时它对类 A 进行子类化 因为作为类方
  • 在 Android 中创建和使用 9 补丁图像

    我最近听说了 9 补丁图像 我知道它是 9 平铺的并且是可拉伸的 我想了解更多 如何创建 9 块图像 有什么工具吗 我可以通过 AndroidSDK 或代码创建它吗 9 patch 相对于普通 png 的主要优点 它是否可以根据屏幕动态 自
  • 单击 RecyclerView 内的 ImageView 时更改图像资源

    每当我单击它时 单击图像 而不是项目 我都会尝试更改回收器视图内特定位置的设备图像资源 我尝试将 setOnClickListener 放入 onBindViewHolder 方法中 但只有最后一个项目受到影响 这是我的回收者视图 http