在RecyclerView中有多项选择? [英] Multi selection in RecyclerView?

查看:46
本文介绍了在RecyclerView中有多项选择?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

你好,我正在尝试在recycler view android中实现多重选择,以在单击该特定视图时显示图标,我已经尝试了以下代码,并且在该特定位置工作正常,但是还有其他几种视图正在更新,所以请检查并让我知道我缺少什么

Hello I am trying to implement multi select in recycler view android for showing an icon when clicked on that particular view, I have tried the below code and is working fine for that particular position, however there are other several views that too are getting updated, so please check and let me know what am I missing

这是我的适配器代码:

public class ContactsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{

Context context;
ArrayList<String> alContactName, alContactEmail, alContactNumber;
ArrayList<Boolean> alFromLinkedIn;
int mergeFlag=0;
private static SparseBooleanArray selectedItems;
ArrayList<Integer> alSelectedPositions;

public ContactsAdapter(Context context, ArrayList<String> alContactName, ArrayList<String> alContactEmail, ArrayList<String> alContactNumber, ArrayList<Boolean> alisFromLinkedIn) {
    //Include one more variable for checking type i.e linked in or normal contact
    super();
    this.context = context;
    this.alContactName = alContactName;
    this.alContactEmail = alContactEmail;
    this.alContactNumber = alContactNumber;
    this.alFromLinkedIn = alisFromLinkedIn;
    alSelectedPositions=new ArrayList<>();
}

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

@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
    try {
        ((ContactsHolder) holder).relMain.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                alSelectedPositions.add(position);
                notifyDataSetChanged();
            }
        });
      if(alSelectedPositions.get(position)==position){
            ((ContactsHolder) holder).imgMerge.setVisibility(View.VISIBLE);
        }
        else {
            ((ContactsHolder) holder).imgMerge.setVisibility(View.GONE);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

推荐答案

我已经解决了我的问题,这里的代码是否可以帮助某人:

I have resolved my issue here is the code if it could help someone:

@Override
    public ContactsHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_merge_contact, parent, false);
        final ContactsHolder holder = new ContactsHolder(view);
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (holder.getAdapterPosition() != RecyclerView.NO_POSITION) {
                    mSelectedItemPosition = holder.getAdapterPosition();
                    //notifyItemChanged(holder.getAdapterPosition());
                    notifyDataSetChanged();
                }
            }
        });
        return holder;
    }

@Override
    public void onBindViewHolder(ContactsHolder holder, int position) {
        try {
            if (mSelectedItemPosition == position) {
                if (mergeFlag != 1) {
                    holder.imgMerge.setVisibility(View.VISIBLE);
                    mergeFlag = 1;
                    selectdParentId = contactsModels.get(position).alContactIdList;
                } else{
                    //holder.relDone.setVisibility(View.GONE);
                    if (!selectdParentId.equals(contactsModels.get(position).alContactIdList)) {
                        holder.relDone.setVisibility(View.VISIBLE);
                        alChildId.add(contactsModels.get(position).alContactIdList);

                    } else {
                        holder.imgMerge.setVisibility(View.VISIBLE);
                    }
                }
            } else {
                holder.imgMerge.setVisibility(View.GONE);
                holder.relDone.setVisibility(View.GONE);
            }
}

这篇关于在RecyclerView中有多项选择?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆