android - 如何在 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();
}
}
我该如何解决这个问题?
解决方案
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());
}
});
}
推荐阅读
- python - 列表索引超出范围:我可以填充我的文本以避免?
- maven - intellij maven javadoc插件JAVA_HOME未设置错误
- python - 没有 While 循环的 Python 递归并在不使用 %operators 的情况下找到 x/y 的剩余部分?
- sql - 获取“一天中的第几周”?
- javascript - 如何使用 keycloak-angular 中的默认用户登录?
- r - 在 R 中制作散点图
- python - 如何从包含数组中嵌套值列表的输出构造熊猫数据框,在字典中
- kotlin - ktlint 不检查 kotlin 文件
- python - 我该如何解决“binascii.Error:不正确的填充”
- javascript - 这个数组初始化速记是如何工作的?