Android Recyclerview单个项目选择无法正常工作

Android Recyclerview单个项目选择无法正常工作,android,android-recyclerview,Android,Android Recyclerview,我用交错网格布局实现了一个recyclerview,在arrayList中包含大约31个项目,recyclerview工作正常,但我遇到了与单个项目选择相关的问题 如图所示,当我选择值直到“26”时,其工作正常 但是,当我选择“26”之后的值时,也会选择最顶部项目中的值,如下图所示 我一次只需要选择一个项目 我在适配器类中实现了以下代码 public class DialogAdapter extends RecyclerView.Adapter<DialogAdapter.Dial

我用交错网格布局实现了一个recyclerview,在arrayList中包含大约31个项目,recyclerview工作正常,但我遇到了与单个项目选择相关的问题

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

但是,当我选择“26”之后的值时,也会选择最顶部项目中的值,如下图所示

我一次只需要选择一个项目

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

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);
     }
  }
}
公共类DialogAdapter扩展
RecyclerView.适配器
{
//组成部分
公共语境;
公共ArrayList对话框ArrayList=新建
ArrayList();
选定的专用最终ArrayList=新ArrayList();
private int lastCheckedPosition=-1;
公共接口;
//参数化构造函数
公共对话框适配器(上下文,ArrayList
dialogArrayList,接口)
{
this.context=上下文;
this.dialogArrayList=dialogArrayList;
this.interface=接口;
}
@非空
@凌驾
public DialogHolder onCreateViewHolder(@NonNull ViewGroup parent,int
视图类型)
{
View-View=LayoutFlater.from(parent.getContext()).flate(R.layout.custom\u cardview,parent,false);
DialogHolder DialogHolder=新的DialogHolder(视图);
返回对话框持有者;
}
@凌驾
public void onBindViewHolder(@NonNull final DialogHolder holder,final int position)
{
最终AlertDialogModel AlertDialogModel=dialogArrayList.get(位置);
holder.textView.setText(alertDialogModel.getDisplayValue());
如果(lastCheckedPosition==位置)
{
holder.textView.setTextColor(context.getResources().getColor(R.color.white));
holder.textView.setBackground(context.getResources().getDrawable(R.drawable.circular_shape_selection));
}
其他的
{
}
holder.textView.setOnClickListener(新视图.OnClickListener()
{
@凌驾
公共void onClick(视图v)
{
lastCheckedPosition=位置;
notifyDataSetChanged();
holder.textView.setTextColor(context.getResources().getColor(R.color.white));
holder.textView.setBackground(context.getResources().getDrawable(R.drawable.circular_shape_selection));
接口.getSelectedValue(alertDialogModel.getDisplayValue());
}
});
}
@凌驾
public int getItemCount()
{
返回dialogArrayList.size();
}
公共静态类DialogHolder扩展了RecyclerView.ViewHolder
{
公共文本视图文本视图;
公共对话框持有者(查看项目视图)
{
超级(项目视图);
textView=(textView)itemView.findViewById(R.id.textView);
}
}
}

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

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

      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;
        }
    });
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));
}

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

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));
}

查看此答案处理您的else部分也和else部分清除上一选择意味着在if部分添加背景和在else部分删除背景Hil Kumar感谢它起作用查看此答案处理您的else部分也和在else部分清除上一选择意味着在if部分添加背景和在else部分删除背景Sahil Kumar感谢您的帮助,但没有成功,我添加了Sahil Kumar建议的其他部分,成功了感谢您的帮助,但没有成功,我添加了Sahil Kumar建议的其他部分,成功了