J'ai une boîte de dialogue et je veux ajouter un recyclerView ou listView et je sais que je dois utiliser une liste pour contrôler les éléments dans chaque rangée. Maintenant, quand je veux changer la valeur d'une case à cocher ou d'un radioButton toutes les données dans la liste changent. J'ai utilisé Log et j'ai compris que toutes les données booléennes changeaient en même temps. J'ai déplacé tous les articles à une activité mais le problème demeure. Il semble qu'il y ait un lien entre les données arrayList.Toutes les valeurs dans RecycleView et ListView changent pendant que j'utilise le dialogue
J'ai également modifié mes codes et utilisé SwitchCompat, mais toutes les données booléennes dans mDataSet changent lorsque je veux en changer un seul.
public class AdapterSetOnOffTime extends RecyclerView.Adapter<AdapterSetOnOffTime.ViewHolder> {
private Context mContext;
private ArrayList<StructSetOnOffTime> mDataSet;
private View mView;
public AdapterSetOnOffTime(Context context, ArrayList<StructSetOnOffTime> dataSet) {
mContext = context;
mDataSet = dataSet;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
int id = R.layout.layout_list_settime_items;
mView = LayoutInflater.from(mContext).inflate(id, parent, false);
return new ViewHolder(mView);
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
holder.mSwitch.setChecked(mDataSet.get(position).setOnOffValue);
holder.mSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
if(isChecked){
mDataSet.get(position).setOnOffValue = true;
}else{
mDataSet.get(position).setOnOffValue = false;
}
}
});
}
@Override
public int getItemCount() {
return mDataSet.size();
}
static class ViewHolder extends RecyclerView.ViewHolder {
public TextView mTextTitle;
public TextView mTextValue;
public ImageButton mBtn;
public SwitchCompat mSwitch;
public ViewHolder(View itemView) {
super(itemView);
mTextTitle = (TextView) itemView.findViewById(R.id.txtSetTime);
mTextValue = (TextView) itemView.findViewById(R.id.txtOnOffStatus);
mBtn = (ImageButton) itemView.findViewById(R.id.btnSetTime);
mSwitch = (SwitchCompat) itemView.findViewById(R.id.swPrefSwitch);
}
}
}
Mise à jour réponse
Après avoir perdu un jour j'ai reconnu que je fait une petite erreur pour remplir ArrayList et je vais le partager.
méthode précédente de l'adaptateur de remplissage:
StructSetOnOffTime item = new StructSetOnOffTime();
ArrayList<StructSetOnOffTime> arrayList = new ArrayList<>();
for(int i = 0; i < 9; i++){
item.setTimeValue = null;
item.setOnOffValue = false;
arrayList.add(item);
}
Comme @Anatoli dit, j'eu un problème dans cette section et je l'ai résolu en modifiant la méthode supérieure à celle-ci:
ArrayList<StructSetOnOffTime> arrayList = new ArrayList<>();
for(int i = 0; i < 9; i++){
StructSetOnOffTime item = new StructSetOnOffTime();
item.setTimeValue = null;
item.setOnOffValue = false;
arrayList.add(item);
}
Merci pour votre réponse Anatoli, j'ai changé boutons radio pour SwitchCompat mais le problème est toujours en restant, j'ai une autre classe RecyclerView et il n'a pas de problème, en Dans ce cas, toutes les valeurs booléennes changent quand je change juste l'une d'entre elles. Il semble qu'il y ait un lien entre elles, mais ce n'est pas le cas.Même si je crée une activité et déplace tous les objets, le problème persiste. –
Apparaît-il maintenant seulement dans ListView? Pourriez-vous poster le code, où vous initialisez 'radOff' et' ranOn'? – anatoli
@Mohsen, j'ai créé la vue avec votre adaptateur sur mon côté et ça se voit fonctionner correctement. Mettre à jour (rerun) app sur votre appareil et s'il vous plaît faire des photos avant et après cliquez sur le commutateur – anatoli