Recyclerview单项选择无法正常工作

时间:2018-07-31 07:20:40

标签: android android-recyclerview

我用交错的gridLayout实现了一个recyclerview,它的arrayList中包含大约31个项目,recyclerview正常工作,但是我遇到了与单个项目选择有关的问题。

当我如图所示选择直到“ 26”的值时,其工作正常enter image description here

但是,当我选择“ 26”之后的值时,也会选择最上面项的值,如下图所示。enter image description here

我一次只能选择一项。

我已经在适配器类中实现了以下代码

public class DialogAdapter extends 
  RecyclerView.Adapter<DialogAdapter.DialogHolder>
 {
   // components
     public Context context;
     public ArrayList<AlertDialogModel> dialogArrayList = new 
          ArrayList<AlertDialogModel>();
     private final ArrayList<Integer> selected = new ArrayList<>();
     private int lastCheckedPosition = -1;
    public Interface interface;

    // parameterized constructor
    public DialogAdapter(Context context, ArrayList<AlertDialogModel> 
    dialogArrayList,Interface interface)
   {
       this.context = context;
       this.dialogArrayList = dialogArrayList;
       this.interface = interface;
   }
    @NonNull
   @Override
   public DialogHolder onCreateViewHolder(@NonNull ViewGroup parent, int 
   viewType)
   {
      View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.custom_cardview,parent,false);
    DialogHolder dialogHolder = new DialogHolder(view);
    return dialogHolder;
}

@Override
public void onBindViewHolder(@NonNull final DialogHolder holder, final int position)
{
    final AlertDialogModel alertDialogModel = dialogArrayList.get(position);

    holder.textView.setText(alertDialogModel.getDisplayValue());
    if(lastCheckedPosition == position)
    {
        holder.textView.setTextColor(context.getResources().getColor(R.color.white));
        holder.textView.setBackground(context.getResources().getDrawable(R.drawable.circular_shape_selection));
    }
    else
    {

    }
    holder.textView.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {

            lastCheckedPosition = position;
            notifyDataSetChanged();
            holder.textView.setTextColor(context.getResources().getColor(R.color.white));
            holder.textView.setBackground(context.getResources().getDrawable(R.drawable.circular_shape_selection));

            interface.getSelectedValue(alertDialogModel.getDisplayValue());
        }
    });
}
@Override
public int getItemCount()
{
    return dialogArrayList.size();
}
public static class DialogHolder extends RecyclerView.ViewHolder
{
    public TextView textView;
    public DialogHolder(View itemView)
    {
        super(itemView);
        textView = (TextView)itemView.findViewById(R.id.textView);
     }
  }
}

任何人都可以关联我的代码并确定问题吗?

2 个答案:

答案 0 :(得分:1)

      holder.textView.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {

            lastCheckedPosition = position;
            notifyDataSetChanged();
            holder.textView.setTextColor(context.getResources().getColor(R.color.white));
            holder.textView.setBackground(context.getResources().getDrawable(R.drawable.circular_shape_selection));

            interface.getSelectedValue(alertDialogModel.getDisplayValue());


//below line is important to remove previous selected position from the variable
 lastCheckedPosition = -1;
        }
    });

答案 1 :(得分:0)

您应该将文本视图置于原始状态:

if(lastCheckedPosition == position)
{
    holder.textView.setTextColor(context.getResources().getColor(R.color.white));
    holder.textView.setBackground(context.getResources().getDrawable(R.drawable.circular_shape_selection));
}
else
{ 
    holder.textView.setTextColor(context.getResources().getColor(R.color.transparent));
    holder.textView.setBackground(null));
}