如何在RecyclerView中选择选定的值多值

时间:2019-06-13 05:53:24

标签: java android android-recyclerview

我想获取在recyclerview适配器中选择的活动中的选定ID

holder.images.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (holder.checked.getVisibility() == View.VISIBLE) {

                holder.checked.setVisibility(View.GONE);



            } else if (holder.checked.getVisibility() == View.GONE) {


                holder.checked.setVisibility(View.VISIBLE);

            }
        }
    });

4 个答案:

答案 0 :(得分:1)

使用列表来处理您选择的项目或职位

为商店所选商品声明清单

private List<Integer> selectedPositions=new ArrayList();

如下所示在onBindViewHolder中更新代码

holder.checked.setVisibility(selectedPositions.contains(position)?View.VISIBLE:View.GONE);
holder.images.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (selectedPositions.contains(position)) {
                    holder.checked.setVisibility(View.GONE);
                      selectedPositions.removeAt(selectedPositions.indexOf(position));
                    } else  {
                    holder.checked.setVisibility(View.VISIBLE);
                    selectedPositions.add(position);

            }
        }
    });

答案 1 :(得分:1)

在这里,我创建了清单并放置了数据大小的解决方案

public static ArrayList<Integer> dataSize=new ArrayList<>();

并传递给适配器

  holder.checked.setVisibility(idpositions.get(position)==0?View.GONE:View.VISIBLE);

    holder.images.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (dataSize.size()>0) {

                if (holder.checked.getVisibility() == View.VISIBLE) {

                    holder.checked.setVisibility(View.GONE);

                    dataSize.set(position,0);

                } else if (holder.checked.getVisibility() == View.GONE) {

                    dataSize.add(position,data.getId());

                    holder.checked.setVisibility(View.VISIBLE);

                }

            }
        }
    });

然后单击按钮即可获取该数组列表并获取您选择的值

  if(dataSize.size()>0){

        for (int i = 0; i < dataSize.size(); i++) {

            if (dataSize.get(i)==0){
                continue;
            }else {
                ids= ids+String.valueOf(dataSize.get(i))+",";
            }

        }

        Toast.makeText(this, ids, Toast.LENGTH_SHORT).show();

    }

答案 2 :(得分:0)

现在,您需要声明一个列表来保存那些选定的ID

private List<DATA_TYPE> selectedIds = new ArrayList();

您可以做的是在模型中声明一个isSelected布尔值。在onBindViewHolder方法中,将可见性设置为

if (YOUR_POJO.isSelected()) {
   holder.checked.setVisibility(View.VISIBLE);
} else {
   holder.checked.setVisibility(View.GONE);
}

当您单击图像时,检查是否已基于该图像进行选择,您可以添加/删除其ID

holder.images.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if(YOUR_POJO.isSelected()){
             YOUR_POJO.setSelected(false);
             if (selectedIds.contains(YOUR_POJO.getId()){
                selectedIds.remove(YOUR_POJO.getId());
             }
        } else {
             YOUR_POJO.setSelected(true);
             selectedIds.add(YOUR_POJO.getId());
        }
        notifyItemChanged(holder.getAdapterPosition(), YOUR_POJO);
    }
});

希望这会有所帮助。

答案 3 :(得分:0)

创建这样的接口类;

public interface ItemSelectedListener{
    void onItemSelected(int selectedposition);
}

在您的适配器中初始化您的接口;

    private List<ItemSelectedListener> mItemSelectedSubscribers = new ArrayList<ItemSelectedListener>();

在适配器中添加此方法;

public void subscribeItemSelection(ItemSelectedListenerlistener) {
        mItemSelectedSubscribers .add(listener);
    }

在点击事件中设置此循环;

for (ItemSelectedListener listener : mMediaSelectedSubscribers) {
    listener.onItemSelected(position);
                }

在您的活动中,实现您的界面,您将设置一个实现的方法。这种方法看起来像这样;

int selectedPosition;
    @Override
        public void onMediaSelected(int position) {
            selectedPosition = position;
        }

执行此操作时,您可以在活动中使用想要的位置

希望这项帮助!