当前位置: 首页 > 知识库问答 >
问题:

如何使用RecyclerView在编辑模式下显示选中的项目?

尹冠宇
2023-03-14

我无法在我的应用程序中获得一个业务逻辑。谁能帮我一下,我是android开发新手。

顺便说一句,我正在使用Android回收视图来显示项目列表,并且我需要显示已检查的项目已标记为签入回收视图。

我正在从服务器上查看项目:兴趣列表:[“古董收藏”、“工艺品”、“划船”]

这些项目需要与我的recyclerView ArrayList或项目进行比较。如果这些项目在RecyclerViewer中可用,我需要显示为选中的项目。

我怎么能为此编写简单的逻辑

strings ArrayList具有回收器项目列表数据,InterestsList是选中的项目列表数据。

这是我的适配器类:

  @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        holder.tvInterestName.setText(interests.get(position).getInterest().toString());

        List<String> strings = new ArrayList<>(interests.size());
        for (Interest object : interests) {
            strings.add(Objects.toString(object, null));
        }

        interestList = model.getInterests();

        System.out.println("LISTTTTTT @@@"+strings.toString());
        System.out.println("LISTTTTTT @@@"+interestList.size());

        for (int i = 0; i < strings.size(); i++) {
            for (int j = 0; j < interestList.size(); j++) {
                if(strings.get(i).equalsIgnoreCase(interestList.get(j))) {
                    holder.checkBox.setChecked(true);
                }
                else
                holder.checkBox.setChecked(false);
            }
        }



        //in some cases, it will prevent unwanted situations
        holder.checkBox.setOnCheckedChangeListener(null);

        //if true, your checkbox will be selected, else unselected
        holder.checkBox.setChecked(interests.get(position).isSelected());

        holder.cell.setOnClickListener(v ->
        {
            holder.checkBox.performClick();
        });

        if (interests.get(position).isSelected()) {
            holder.checkBox.setChecked(true);
        } else {
            holder.checkBox.setChecked(false);
        }

        holder.checkBox.setOnCheckedChangeListener((buttonView, isChecked) ->
        {
            guestListener.OnMultipleGuestListener(position, isChecked);
        });

    }

我的活动类中使用的多选择项接口侦听器:

  @Override
    public void OnMultipleGuestListener(int position, boolean isChecked) {
        interestList.get(position).setSelected(isChecked);
        interestsAdapter.notifyDataSetChanged();
    }

共有1个答案

韦繁
2023-03-14

当您在usr单击其他区域时也捕获事件时,让我们仅关注该事件并忽略单击复选框。

xml文件中,将复选框设置为可单击=false

    @Override
    public void onBindViewHolder(@NonNull final MyViewHolder  holder, int position) {
        String interest = interests.get(position).getInterest().toString();
        holder.tvInterestName.setText(interest);

        interestList = model.getInterests(); //assuming it's list of string from your code

        //do not assign list from model here, instead do it on separate function 
        //of adapter because we do not need to resign same list every time to 
        //interestList from some other model which have nothing to do with each 
        //item. as this method will be called for each item

        final boolean isCheck = interestList.contain(interest);
        holder.checkBox.setChecked(isCheck);

        holder.cell.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean isChecked = !holder.checkBox.isChecked();
                holder.checkBox.setChecked(isChecked );
                guestListener.OnMultipleGuestListener(position, isChecked);
            }
        });
    }
 类似资料:
  • 我正在使用npm模块编辑数据表单。下面是我的API响应示例: 下面是编辑组件所需的代码行 我需要显示下拉列表中选择的公司名称的现有值。

  • 如何使用网格布局管理器水平显示三行三列的循环视图项目,增加垂直增加的价值,类似于下图

  • 这是我现在面临的一个奇怪的问题。从我的应用程序中,我从JSON文件中从链接中获取数据,然后用Volley解析它。现在我想在一个看起来不起作用的RecyclerView上显示数据,我很高兴我的代码很好,但是有些东西似乎不起作用,我找不到它。 这是活动代码 HomeActivity.java: 这是我从适配器中扩展的布局,并从JSON文件中设置数据 和适配器类相关的代码,我猜: @Override p

  • 问题内容: 假设我有一个函数,并且正在主JavaScript文件中调用该函数。 这种模式会使事情有所不同吗?谁能告诉我这种模式的基本示例? 问题答案: 一个小例子: 在匿名函数中启动,该匿名函数被赋予一个值,并且对该函数是私有的。函数返回的是带有属性和属性的对象常量,它是对的引用。在使用私有变量。这一切都可以通过使用闭包来完成(该函数范围内的所有内容都可以被该同一函数中的其他所有内容引用)。 显示

  • 问题内容: 我需要添加一个可以列出an元素的位置,并且我发现有一种更新更好的显示列表的方法- 。 我的问题是如何在我的应用程序中实现这一点。我发现我需要使用,但是我不太了解如何正确实现整个过程。 如果你想知道,我指的是这个的文档的例子,这是我一直在读。 编辑: 更新我的代码后,它说它无法解析该符号: 所以我以为我把它放错了地方(很可能),实际上我把它放到Adapter类的末尾,就在Method之后

  • 问题内容: 我想将所有JavaScript代码都放在一个部分中;就在我的主版式页面上的结束标记之前,只是想知道最好的方法,MVC样式。 例如,如果我创建一个使用jQuery UI的DateTime Picker 的文件,而不是将JavaScript直接嵌入该模板中,但是它将呈现中间页。 在我的普通视图中,我可以先使用然后在主布局中使用,但这在显示/编辑器模板中似乎不起作用-有什么想法吗? 问题答案