RecyclerView中的Cardview选择多张卡片,而不仅仅是一张



我正在创建一个简单的android应用程序,其中创建cardview并通过recycleview插入。我增加了选择每一张卡片的可能性,这改变了文本的颜色,使其在卡片上可见。问题是,当你点击第一张卡时,选择效果也会添加到最后一张卡上,就好像有计数错误之类的。实际上,第一张和最后一张卡是相连的,就好像它们是一样的,如下图所示:

[1] :https://i.stack.imgur.com/NX9QO.jpg

[2] :https://i.stack.imgur.com/frxb9.jpg

我没有发现任何此类问题,但我过去在与cardview的交互中已经遇到过这样的问题。这是我的适配器,它的代码是:

public class AllMovesListAdapter extends RecyclerView.Adapter<AllMovesListAdapter.UserViewHolder> {
private static CardView card;
private List<moveListActivity.move_card> moveList;
private static Context context;
int[] counter;
public AllMovesListAdapter(List<moveListActivity.move_card> biglList, Context context) {
this.moveList = biglList;
this.context = context;
}
@Override
public UserViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.move_card, null);
UserViewHolder userViewHolder = new UserViewHolder(view);
counter = new int[getItemCount()];
return userViewHolder;
}
@Override
public void onBindViewHolder(final UserViewHolder holder, int position) {
moveListActivity.move_card mcard = moveList.get(position);
holder.tvName.setText(mcard.getName());
holder.tvDescr.setText(mcard.getDescr());
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = holder.getAdapterPosition();
if (position!=RecyclerView.NO_POSITION){
if (counter[position]==0){
holder.ivTr.setVisibility(View.VISIBLE);
holder.tvName.setTextColor(ContextCompat.getColor(context, R.color.green));
holder.tvDescr.setTextColor(ContextCompat.getColor(context, R.color.green));
counter[position]=1;
}else{
holder.ivTr.setVisibility(View.GONE);
holder.tvName.setTextColor(ContextCompat.getColor(context, R.color.white));
holder.tvDescr.setTextColor(ContextCompat.getColor(context, R.color.white));
counter[position]=0;
}
Snackbar.make(v, "Click detected on item " + position + "| counter: " + counter[position],
Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
}
});
}
@Override
public int getItemCount() {
return moveList.size();
}
public static class UserViewHolder extends RecyclerView.ViewHolder {
ImageView ivMove, ivTr;
TextView tvName;
TextView tvDescr;
public UserViewHolder(View itemView) {
super(itemView);
ivTr = (ImageView) itemView.findViewById(R.id.ivTr);
ivMove = (ImageView) itemView.findViewById(R.id.ivMove);
tvName = (TextView) itemView.findViewById(R.id.tvName);
tvDescr = (TextView) itemView.findViewById(R.id.tvDescr);
}
}
}

有人知道这个问题取决于什么吗?我只想通过这种方法实现卡片列表的多选。(我不确定将来我会处理一些卡片视图,所以我想使用uan-recyclerview,而不是在.xml文件中创建单独的卡片。

编辑:根据leojg的建议更新了代码。将onClick事件管理移到onBindViewHolder。但问题依然存在。

之所以会发生这种情况,是因为recyclerator视图在项目离开屏幕时会回收项目位置。

您应该将onclick逻辑移动到onBindViewHolder()

相关内容

最新更新