gpt4 book ai didi

java - 回收 recyclerview 时应用程序的布局被破坏

转载 作者:行者123 更新时间:2023-12-01 18:49:04 26 4
gpt4 key购买 nike

我正在尝试构建一个 Android 应用程序,在其中使用 RecyclerView

RecyclerView 的项目中,我使用一个 TextView 和四个 CheckBox 来选择任何人。

现在,当我选择一个 CheckBox 时,其他复选框将根据我编写的代码被禁用。现在的问题是,当我在选择复选框后回收 RecyclerView 时,另一个将在没有任何选择的情况下被禁用。

当我从 RecyclerView 底部选择复选框时,也会发生同样的情况,上面的复选框也会被禁用。

我想解决这个问题。

这是我在适配器类中的代码。

@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, final int position) {
final Food foodItems = foodList.get(position);
holder.txtPersonName.setText(foodItems.getPersonNames());
holder.chkSavour.setChecked(foodItems.getChkSavour());
holder.chkBurgur.setChecked(foodItems.getChkBurgur());
holder.chkKrrahi.setChecked(foodItems.getChkKrrahi());

holder.chkSavour.setTag(position);
holder.chkSavour.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Integer pos = (Integer) holder.chkSavour.getTag();
if (!foodList.get(pos).getChkSavour()){
foodList.get(pos).setChkSavour(true);
holder.chkKrrahi.setEnabled(false);
holder.chkBurgur.setEnabled(false);
holder.chkNone.setEnabled(false);
} else {
foodList.get(pos).setChkSavour(false);
holder.chkBurgur.setEnabled(true);
holder.chkKrrahi.setEnabled(true);
holder.chkNone.setEnabled(true);
}
}
});
holder.chkBurgur.setTag(position);
holder.chkBurgur.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Integer pos = (Integer) holder.chkBurgur.getTag();
if (!foodList.get(pos).getChkBurgur()){
foodList.get(pos).setChkBurgur(true);
holder.chkSavour.setEnabled(false);
holder.chkKrrahi.setEnabled(false);
holder.chkNone.setEnabled(false);
} else {
foodList.get(pos).setChkBurgur(false);
holder.chkSavour.setEnabled(true);
holder.chkKrrahi.setEnabled(true);
holder.chkNone.setEnabled(true);
}
}
});
holder.chkKrrahi.setTag(position);
holder.chkKrrahi.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Integer pos = (Integer) holder.chkKrrahi.getTag();
if (!foodList.get(pos).getChkKrrahi()){
foodList.get(pos).setChkKrrahi(true);
holder.chkSavour.setEnabled(false);
holder.chkBurgur.setEnabled(false);
holder.chkNone.setEnabled(false);
} else {
foodList.get(pos).setChkKrrahi(false);
holder.chkSavour.setEnabled(true);
holder.chkBurgur.setEnabled(true);
holder.chkNone.setEnabled(true);
}
}
});
}

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

public class ViewHolder extends RecyclerView.ViewHolder {

private TextView txtPersonName;
private CheckBox chkSavour;
private CheckBox chkBurgur;
private CheckBox chkKrrahi;
private CheckBox chkNone;
public ViewHolder(@NonNull View itemView) {
super(itemView);
txtPersonName = itemView.findViewById(R.id.txtName);
chkSavour = itemView.findViewById(R.id.chkSavour);
chkBurgur = itemView.findViewById(R.id.chkBurgur);
chkKrrahi = itemView.findViewById(R.id.chkKrrahi);
chkNone = itemView.findViewById(R.id.chkNone);
}
}
}

最佳答案

您错过了查看启用/禁用部分。设置复选框检查状态后添加以下行。

holder.chkSavour.setChecked(foodItems.getChkSavour());
holder.chkBurgur.setChecked(foodItems.getChkBurgur());
holder.chkKrrahi.setChecked(foodItems.getChkKrrahi());

//Add this
if(foodItems.isSelected()){
holder.chkSavour.setEnabled(foodItems.getChkSavour())
holder.chkKrrahi.setEnabled(foodItems.getChkKrrahi());
holder.chkBurgur.setEnabled(foodItems.getChkBurgur());
holder.chkNone.setEnabled(foodItems.getChkNone());
}else{
holder.chkSavour.setEnabled(true)
holder.chkKrrahi.setEnabled(true);
holder.chkBurgur.setEnabled(true);
holder.chkNone.setEnabled(true);
}

在模型中添加一个 boolean 变量来保存用户偏好设置是否已选择的状态。

holder.chkSavour.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Integer pos = (Integer) holder.chkSavour.getTag();
if (!foodList.get(pos).getChkSavour()){
foodList.get(pos).setChkSavour(true);
foodList.get(pos).setSelected(true); //Used to apply view Enable logic
holder.chkKrrahi.setEnabled(false);
holder.chkBurgur.setEnabled(false);
holder.chkNone.setEnabled(false);
} else {
foodList.get(pos).setChkSavour(false);
foodList.get(pos).setSelected(false); //Reset the disabled check box
holder.chkBurgur.setEnabled(true);
holder.chkKrrahi.setEnabled(true);
holder.chkNone.setEnabled(true);
}
}
});

关于java - 回收 recyclerview 时应用程序的布局被破坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59766836/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com