首页 > 解决方案 > 如何在 Android Studio 的 RecyclerView 中更改项目?

问题描述

我正在尝试类似于 Instagram 的喜欢/不喜欢的功能。但是每当我尝试单击 Recycler View 中的星号时,白色星形不会变为红色星形,如下所示:

白色变为红色,然后再次变为白色。

在此处输入图像描述

MyAdapter课程是:

 public class MyAdapter extends RecyclerView.Adapter<ListItemViewHolder>{

    private List<ListItem> listItems;

    MyAdapter(List<ListItem> listItems){
        this.listItems = listItems;
    }

    @NonNull
    @Override
    public ListItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new ListItemViewHolder(TestListBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
    }

    @Override
    public void onBindViewHolder(@NonNull ListItemViewHolder holder, int position) {

        ListItem listItem = listItems.get(position);
        holder.binding.name.setText(listItem.getTitle());
        holder.binding.post.setText(listItem.getDescription());

        if(listItem.isClick()){
            holder.binding.redStar.setVisibility(View.VISIBLE);
            holder.binding.whiteStar.setVisibility(View.GONE);
        }else{
            holder.binding.redStar.setVisibility(View.GONE);
            holder.binding.whiteStar.setVisibility(View.VISIBLE);
        }

        clicklitn(holder);

    }

    public void clicklitn(final ListItemViewHolder holder){
        holder.binding.redStar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                holder.binding.redStar.setVisibility(View.GONE);
                holder.binding.whiteStar.setVisibility(View.VISIBLE);
                Log.d("CLICK DETECTION", "Red Star click detected");

                notifyItemChanged(holder.getAdapterPosition());
            }
        });
        holder.binding.whiteStar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                holder.binding.redStar.setVisibility(View.VISIBLE);
                holder.binding.whiteStar.setVisibility(View.GONE);
                Log.d("CLICK DETECTION", "White Star click detected");

                notifyItemChanged(holder.getAdapterPosition());
            }
        });
    }

    @Override
    public int getItemCount() {
        return listItems.size();
    }
}

我该如何解决这个问题?

标签: androidandroid-studio

解决方案


isClick当星星被点击时,你没有设置。我不知道您的类层次结构如何,但是您应该这样做:

    public void clicklitn(final ListItemViewHolder holder){
        holder.binding.redStar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                holder.binding.redStar.setVisibility(View.GONE);
                holder.binding.whiteStar.setVisibility(View.VISIBLE);
                Log.d("CLICK DETECTION", "Red Star click detected");
                //set item isClick to false
                notifyItemChanged(holder.getAdapterPosition());
            }
        });
        holder.binding.whiteStar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                holder.binding.redStar.setVisibility(View.VISIBLE);
                holder.binding.whiteStar.setVisibility(View.GONE);

                Log.d("CLICK DETECTION", "White Star click detected");
                //set item isClick to true
                notifyItemChanged(holder.getAdapterPosition());
            }
        });
    }

推荐阅读