如何在 recyclerview 上设置 OnClickListener 而不取决于位置

2024-03-13

我希望 onclicklistener 方法打开与对象相关的活动:entidad1、entidad2 或 entidad3。

MainActivity.java 上的 OnRecipe 方法,我希望它能够实现,如果 entidad1 出现,它将带我到 x 活动,如果 entidad2 出现到 y 活动,所以,知道如何做到这一点,因为现在它需要我全部entidad1 活动的时间。我想这一定与使用优先级来决定开哪一个而不是仓位有关。

这是我的适配器:

package com.test.platos_4;

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RatingBar;
import android.widget.TextView;

import java.util.List;

public class Adaptador2  extends RecyclerView.Adapter<Adaptador2.ViewHolder>
{
    private List<Entidad2> listItems;
    private OnRecipeListener mOnRecipeListener;

    public  Adaptador2(List<Entidad2> listItems, OnRecipeListener onRecipeListener) {
        this.listItems = listItems;
        this.mOnRecipeListener = onRecipeListener;
    }


    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.elemento_lista2, parent, false);
        return new ViewHolder(view, mOnRecipeListener);
    }

    @Override
    public void onBindViewHolder(ViewHolder viewholder, int position) {
        int resource = listItems.get(position).getImgFoto();
        String title = listItems.get(position).getTitulo();
        String time = listItems.get(position).getTiempo();
        int barra = listItems.get(position).getRating();
        //int fondo = listItems.get(position).getColorfondo();
        viewholder.setData(resource, title, time, barra);
        // por si necesito color de fondo viewholder.setData(resource, title, time, barra, fondo);
    }

    @Override
    public int getItemCount() {
        return listItems.size();
    }
    class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        private ImageView imgFoto;
        private TextView titulo;
        private TextView tiempo;
        private RatingBar ratingBar;
        //private ImageView colorfondo;
        OnRecipeListener onRecipeListener;

        public ViewHolder(View itemView, OnRecipeListener onRecipeListener) {
            super(itemView);

            imgFoto = itemView.findViewById(R.id.imgFoto);
            titulo = itemView.findViewById(R.id.tvTitulo);
            tiempo = itemView.findViewById(R.id.tvTiempo);
            ratingBar = itemView.findViewById(R.id.ratingBarVerd);
            //colorfondo = itemView.findViewById(R.id.colorfondo);
            this.onRecipeListener = onRecipeListener;

            itemView.setOnClickListener(this);
        }

        //por si necesito color de fondo private void setData(int resource, String title, String time, int barra, int fondo){
        private void setData(int resource, String title, String time, int barra){
            imgFoto.setImageResource(resource);
            titulo.setText(title);
            tiempo.setText(time);
            ratingBar.setRating(barra);
            //colorfondo.setImageResource(fondo);

        }

        @Override
        public void onClick(View v) {
            onRecipeListener.OnRecipe(getAdapterPosition());
        }
    }

    public interface OnRecipeListener{
        void OnRecipe(int priority);
    }
}

这就是 MainActivity.java:

public class Comida extends AppCompatActivity implements Adaptador2.OnRecipeListener {
    private RecyclerView recyclerView1;
    List<Entidad2> listItems;
    Adaptador2 adaptor;
    private Entidad2 entidad1,entidad2,entidad3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_comida);

        recyclerView1 = findViewById(R.id.lv_1);
        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);

        recyclerView1.setLayoutManager(layoutManager);

        listItems = new ArrayList<>();
        entidad1 = new Entidad2(R.drawable.calabacines_3, "Solomillo a la plancha", " 10 min.", 4, 20);
        entidad2 = new Entidad2(R.drawable.patatas_deluxe_especiadas_70523_300_150, "Entrecot", " 15 min.", 2, 50);
        entidad3 = new Entidad2(R.drawable.tomate, "Hamburguesa", " 2 min.", 5, 100);


        listItems.add(entidad1);
        listItems.add(entidad2);
        listItems.add(entidad3);

        adaptor = new Adaptador2(listItems, this);
        recyclerView1.setAdapter(adaptor);
        adaptor.notifyDataSetChanged();
        pickEntidad();
    }
    @Override
    public void OnRecipe(int priority) {

        if (priority == 20) {
            Intent in = new Intent(this, Solomillo.class);
            startActivity(in);
        }
        if (priority == 50) {
            Intent in = new Intent(this, Entrecot.class);
            startActivity(in);
        }
        if (priority == 100) {
            Intent in = new Intent(this, Hamburguesa.class);
            startActivity(in);
        }
    }

    private void pickEntidad(){
        final int random = new Random().nextInt(101);

        int priority1 = entidad1.getPriority();
        int priority2 = entidad2.getPriority();
        int priority3 = entidad3.getPriority();


        listItems.clear();
        if(random < priority1){

            listItems.add(entidad1);

        }else if(random < priority2){

            listItems.add(entidad2);

        }else if (random <= priority3){

            listItems.add(entidad3);

        }
        adaptor.notifyDataSetChanged();
    }
}

和 Entidad.java:

public class Entidad2 {

    private int imgFoto;
    private String titulo;
    private String tiempo;
    private int ratingBar;
    private int priority;
    private int d;


    public Entidad2(int imgFoto, String titulo, String tiempo, int ratingBar, int priority) {

        this.imgFoto = imgFoto;
        this.titulo = titulo;
        this.tiempo = tiempo;
        this.ratingBar = ratingBar;
        this.priority = priority;
    }

    public int getImgFoto() {
        return imgFoto;
    }

    public String getTitulo() {
        return titulo;
    }

    public String getTiempo() {
        return tiempo;
    }

    public int getRating() { return ratingBar; }

    public  int getPriority() {
        return  priority;
    }
}

请帮助我解决问题,如果您需要更多信息,请告诉我,我会发布它。


您试图按优先级区分您的项目,但您正在将项目位置从适配器传递到您的活动。您需要传递单击项目的优先级而不是其位置。我改变了你的Adapter2类

package com.test.platos_4;

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RatingBar;
import android.widget.TextView;

import java.util.List;

public class Adaptador2  extends RecyclerView.Adapter<Adaptador2.ViewHolder>
{
private List<Entidad2> listItems;
private OnRecipeListener mOnRecipeListener;

public  Adaptador2(List<Entidad2> listItems, OnRecipeListener onRecipeListener) {
    this.listItems = listItems;
    this.mOnRecipeListener = onRecipeListener;
}


@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.elemento_lista2, parent, false);
    return new ViewHolder(view, mOnRecipeListener);
}

@Override
public void onBindViewHolder(ViewHolder viewholder, int position) {
    Entidad2 entidad = listItems.get(position);
    int resource = entidad.getImgFoto();
    String title = entidad.getTitulo();
    String time = entidad.getTiempo();
    int barra = entidad.getRating();
    final int priority = entidad.getPriority();
    //int fondo = listItems.get(position).getColorfondo();
    viewholder.setData(resource, title, time, barra);

//You can pass the clicked item's priority back to your activity like this
    viewholder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
    mOnRecipeListener.OnRecipe(priority);
        }
    });
    // por si necesito color de fondo viewholder.setData(resource, title, time, barra, fondo);
}

@Override
public int getItemCount() {
    return listItems.size();
}
class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    private ImageView imgFoto;
    private TextView titulo;
    private TextView tiempo;
    private RatingBar ratingBar;
    //private ImageView colorfondo;
    OnRecipeListener onRecipeListener;

    public ViewHolder(View itemView, OnRecipeListener onRecipeListener) {
        super(itemView);

        imgFoto = itemView.findViewById(R.id.imgFoto);
        titulo = itemView.findViewById(R.id.tvTitulo);
        tiempo = itemView.findViewById(R.id.tvTiempo);
        ratingBar = itemView.findViewById(R.id.ratingBarVerd);
        //colorfondo = itemView.findViewById(R.id.colorfondo);

        //This is useless
        //this.onRecipeListener = onRecipeListener;

    }

    //por si necesito color de fondo private void setData(int resource, String title, String time, int barra, int fondo){
    private void setData(int resource, String title, String time, int barra){
        imgFoto.setImageResource(resource);
        titulo.setText(title);
        tiempo.setText(time);
        ratingBar.setRating(barra);
        //colorfondo.setImageResource(fondo);

    }

    @Override
    public void onClick(View v) {

    }
}

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

如何在 recyclerview 上设置 OnClickListener 而不取决于位置 的相关文章

  • 如何使用 Java 和 Selenium WebDriver 在 C 目录中创建文件夹并需要将屏幕截图保存在该目录中?

    目前正在与硒网络驱动程序和代码Java 我有一种情况 我需要在 C 目录中创建一个文件夹 并在该文件夹中创建我通过 selenium Web 驱动程序代码拍摄的屏幕截图 它需要存储在带有时间戳的文件夹中 如果我每天按计划运行脚本 所有屏幕截
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • 加速代码 - 3D 数组

    我正在尝试提高我编写的一些代码的速度 我想知道从 3d 整数数组访问数据的效率如何 我有一个数组 int cube new int 10 10 10 我用价值观填充其中 然后我访问这些值数千次 我想知道 由于理论上所有 3d 数组都存储在内
  • Spark 1.3.1 上的 Apache Phoenix(4.3.1 和 4.4.0-HBase-0.98)ClassNotFoundException

    我正在尝试通过 Spark 连接到 Phoenix 并且在通过 JDBC 驱动程序打开连接时不断收到以下异常 为简洁起见 下面是完整的堆栈跟踪 Caused by java lang ClassNotFoundException org a
  • 控制Android的前置LED灯

    我试图在用户按下某个按钮时在前面的 LED 上实现 1 秒红色闪烁 但我很难找到有关如何访问和使用前置 LED 的文档 教程甚至代码示例 我的意思是位于 自拍 相机和触摸屏附近的 LED 我已经看到了使用手电筒和相机类 已弃用 的示例 但我
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • 斯坦福 NLP - 处理文件列表时 OpenIE 内存不足

    我正在尝试使用斯坦福 CoreNLP 中的 OpenIE 工具从多个文件中提取信息 当多个文件 而不是一个 传递到输入时 它会给出内存不足错误 All files have been queued awaiting termination
  • 从 127.0.0.1 到 2130706433,然后再返回

    使用标准 Java 库 从 IPV4 地址的点分字符串表示形式获取的最快方法是什么 127 0 0 1 到等效的整数表示 2130706433 相应地 反转所述操作的最快方法是什么 从整数开始2130706433到字符串表示形式 127 0
  • Java按日期升序对列表对象进行排序[重复]

    这个问题在这里已经有答案了 我想按一个参数对对象列表进行排序 其日期格式为 YYYY MM DD HH mm 按升序排列 我找不到正确的解决方案 在 python 中使用 lambda 很容易对其进行排序 但在 Java 中我遇到了问题 f
  • 如何将 pfx 文件转换为 jks,然后通过使用 wsdl 生成的类来使用它来签署传出的肥皂请求

    我正在寻找一个代码示例 该示例演示如何使用 PFX 证书通过 SSL 访问安全 Web 服务 我有证书及其密码 我首先使用下面提到的命令创建一个 KeyStore 实例 keytool importkeystore destkeystore
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • 玩!框架:运行“h2-browser”可以运行,但网页不可用

    当我运行命令时activator h2 browser它会使用以下 url 打开浏览器 192 168 1 17 8082 但我得到 使用 Chrome 此网页无法使用 奇怪的是它以前确实有效 从那时起我唯一改变的是JAVA OPTS以启用
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • 使用 JMF 创建 RTP 流时出现问题

    我正处于一个项目的早期阶段 需要使用 RTP 广播DataStream创建自MediaLocation 我正在遵循一些示例代码 该代码目前在rptManager initalize localAddress 出现错误 无法打开本地数据端口
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐

  • 程序类型已存在:io.invertase.firebase.BuildConfig

    根据一些谷歌搜索 两个包之间似乎存在一些重叠 我过去遇到过类似的问题 我认为我能够使用 gradlew clean 修复它 但这并不能解决我当前的问题 这是错误 任务 app transformDexArchiveWithDexMerger
  • 箱子堆放问题

    我在很多地方都发现了这个著名的 dp 问题 但我不知道如何解决 给你一组 n 种类型 矩形 3 D 盒子 其中第 i 盒子的高度为 h i 宽度为 w i 深度 d i 均为实数 你 想要创建一堆盒子 尽可能高 但你可以 只将一个盒子堆叠在
  • 如何处理使用相同数据库的两个独立 Laravel 项目的迁移?

    我们的设置是这样的 我们有 API 可以为 iOS 和 Android 应用程序提供支持 我们有一个管理 API 可以为管理 Web 应用程序提供支持 我正在开发管理员 我的同事正在开发应用程序 API 它们都使用相同的数据库和大部分相同的
  • Ternary 和 If/Else 编译成相同的东西,为什么?

    编译器将简单的三元语句编译为与编译简单的 if else 语句相同的东西吗 另外 为什么编译器会被设计为以不同的方式编译它们 例如 这样 int a 169 int b 420 int c c a gt b 42 69 编译为与此相同的内容
  • 是否可以支持旧 API 级别的 setScrollY() (ScrollView API 14) 之类的函数?

    我正在编写一个简单的第一个 Android 应用程序 我的主要活动之一是相当长的 ScrollView 其中我有一些调用其他 ListView 的按钮 当 ListView 完成并且 ScrollView 回来时 我希望屏幕上的位置与第一次
  • 我们可以将两个连接到不同数据库的 Django/python 应用程序合并到一个集成应用程序中吗

    我有两个独立的 Django 应用程序连接到不同的数据库 我想制作一个父应用程序 将请求路由到两个子应用程序之一 这可能吗 我怎样才能实现这一目标 父应用程序不必连接到任何数据库 它应该只是将请求路由到子应用程序 谢谢您的帮助 这个有可能
  • 为什么我在后台运行脚本时会得到“暂停(tty 输入)”的信息

    我写了一个tcsh脚本来清除集群中的垃圾数据 代码是 set hosts 1 set clear path 2 foreach i hosts rsh i rm rvf clear path end 当我在后台运行此脚本时 如下所示 dis
  • 如何查找两个 JavaScript 对象数组之间的差异?

    我有两个 JavaScript 数组orig 原始对象数组 和update 更新后的对象原始数组 具有相同的长度并包含对象 我想输出每对对象之间的差异 Example var orig enabled true name Obj1 id 3
  • 如何将 unicode 字符发送到活动应用程序?

    我需要 Windows API 中的 SendInput 之类的东西 我看到这个方法 我不知道有什么办法可以将unicode字符转换为虚拟键码 CGEventRef CGEventCreateKeyboardEvent CGEventSou
  • Neo4j 2 和 Java 8

    Java 8 将于本周发布 当将 Neo4j 1 9 与 Java 7 一起使用时 我们看到弹出警告 提示仅支持 6 但我们对 1 9 7 组合从未遇到任何问题 我知道 Neo4j 2 不能使用低于 Java 7 的任何东西 但是 Neo4
  • 禁用键盘 :: TextInput React Native

    下面给出的代码在第一次和第二次点击时有效 在相同的文本输入上它不起作用 键盘再次打开 因为文本输入已经聚焦 并且我正在使用自定义数字按钮进行输入 TextInput onFocus Keyboard dismiss 有什么建议么 原生反应的
  • HTML5 中是否可以实现类似 Photoshop 的混合模式?

    我想放一个红色矩形 div 元素在我的网页上 这样它不仅看起来是透明的 而且就像在 Photoshop 的乘法模式中混合的一样 The div 将有position fixed 所以下面的内容会很快改变 任何 HTML5 CSS3 canv
  • 自动打开第一张 Fancybox 图片

    单击链接后 我将从 JSON get 中引入一些图像 然后单击其中一张图片时可以显示图库 但我希望第一张图像立即出现 作为一旦JSON 已加载 这可能吗 我的代码是 json get css cursor pointer click fun
  • 在 tr 上使用 :hover 时出现 CSS 边框问题

    我试图在数据表中突出显示鼠标所在的行 我正在尝试用 border top 和 border bottom 来做到这一点 为了提高可读性 我还在交替行上放置了一个浅色透明的 png 似乎当我打开和关闭边框 适用于 IE8 和 FF 时 行会稍
  • 如何将 PHYLIP 格式转换为 FASTA

    我刚刚开始使用 perl 我有一个问题 我有 PHYLIP 文件 我需要将其转换为 FASTA 我开始写剧本 首先 我删除了行中的空格 现在我需要对齐所有行 每行应包含 60 个氨基酸 并且序列标识符应打印在新行中 也许有人可以给我一些建议
  • 时间耦合与工作单元

    所以 正如一直以来向我指出 https stackoverflow com questions 16148924 value types inferred as object at runtime when using dynamic 16
  • Node.js console.log 是否有长度限制?

    Node js 中 console log 输出的长度有限制吗 下面的代码打印 56462 之前的数字 然后停止 出现此问题是因为我们从 MySQL 返回数据集 并且输出将在 327k 个字符后退出 var out for i 0 i lt
  • 从 C# 运行 Bash 命令

    我试图弄清楚如何从在 IIS 7 Net 4 5 上运行的 C 运行 bash 命令 我一直在网上搜索 很多答案都假设您已经安装 就位了某些东西 我已经有了Git 1 9 4 msysgit 2与 Git Bash 和 Git Giu 一起
  • 如何列出 iOS 中开放的端口?

    我正在使用一个 已越狱设备 我想要写一个应用程序列出打开的端口 例如 TCP 端口 我有两个想法 使用一些本机 API 获取打开的端口列表 执行 shell 命令以获取打开的端口列表并解析此 shell 命令的结果 我应该使用哪个 API
  • 如何在 recyclerview 上设置 OnClickListener 而不取决于位置

    我希望 onclicklistener 方法打开与对象相关的活动 entidad1 entidad2 或 entidad3 MainActivity java 上的 OnRecipe 方法 我希望它能够实现 如果 entidad1 出现 它