0

J'ai un RecycleView et je veux enregistrer l'état de celui-ci lorsque l'utilisateur existe l'application via les préférences partagées. Mon problème que je n'ai pas pu résoudre pendant 4 jours est, quand je pousse le bouton Toggle et quitte l'App < lors de la réouverture je trouve tous les Togglebuttons dans le recycleview ont été vérifiés, non seulement celui spécifique que j'ai vérifié et vice versa avec décochanten essayant d'enregistrer l'état du bouton bascule dans recycleview

togglebutton xml

<ToggleButton 

       android:gravity="start" 
       android:layout_width="24dp" 
       android:layout_height="24dp" 
       android:background="@drawable/check" 
       android:textOn="" 
       android:textOff="" 
       android:id="@+id/ToggleHeartID" 
       android:paddingLeft="20dp" 
       android:onClick="Toggle" 
       android:layout_margin="20dp" 
       android:foreground="?android:attr/selectableItemBackground" 

       /> 

c'est ma classe d'adaptateur que je manipule le bouton à bascule en elle:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { 

ItemClickListener mItemClickListener; 
ArrayList<StoryModelM> arrayList = new ArrayList<>(); 
public Context context; 




MyAdapter(ArrayList<StoryModelM> arrayList){ 
    this.arrayList=arrayList; 
} 

@Override 
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row, parent, false); 

    return new MyViewHolder(view); 

} 

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

    holder.Listindex.setText(arrayList.get(position).getTitleModel()); 
    holder.ListContent.setText(arrayList.get(position).getContentModel()); 

    Context context =holder.itemView.getContext(); 

    SharedPreferences sharedPreferences = context.getSharedPreferences("tgpref1",Context.MODE_PRIVATE); 
    boolean tgpref = sharedPreferences.getBoolean("tgpref",true); 


    if (tgpref){ 
     holder.toggleButton.setChecked(true); 
    }else { 
     holder.toggleButton.setChecked(false); 
    } 


} 

@Override 
public int getItemCount() { 
    return arrayList.size(); 
} 
public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 
    TextView Listindex; 
    TextView ListContent; 
    ToggleButton toggleButton; 




    public MyViewHolder(final View itemView) { 
     super(itemView); 

     final Context context = itemView.getContext(); 




     Listindex =(TextView) itemView.findViewById(R.id.TextViewTitleID); 
     ListContent = (TextView)itemView.findViewById(R.id.TextViewContentID); 
     toggleButton =(ToggleButton)itemView.findViewById(R.id.ToggleHeartID); 



     itemView.setOnClickListener(this); 
     toggleButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       int position = getAdapterPosition(); 

        if (toggleButton.isChecked()) { 



         Animation plus = AnimationUtils.loadAnimation(v.getContext(), R.anim.pulse); 
         toggleButton.startAnimation(plus); 
         SharedPreferences sharedPreferences = context.getSharedPreferences("tgpref1", Context.MODE_PRIVATE); 
         SharedPreferences.Editor editor = sharedPreferences.edit(); 
         editor.putBoolean("tgpref", true); 

         editor.commit(); 



        } 


        else { 
         SharedPreferences sharedPreferences = itemView.getContext().getSharedPreferences("tgpref1", Context.MODE_PRIVATE); 
         SharedPreferences.Editor editor = sharedPreferences.edit(); 

         editor.putBoolean("tgpref", false); 
         editor.commit(); 



        } 


      } 
     }); 





    } 

    @Override 
    public void onClick(View v) { 
     if (mItemClickListener!=null) 
      mItemClickListener.onItemClick(itemView, getAdapterPosition(), getItemId()); 


     } 




} 

public void setFilter(ArrayList<StoryModelM> newList) { 

    arrayList= new ArrayList<>(); 
    arrayList.addAll(newList); 
    notifyDataSetChanged(); 
} 
public void setmItemClickListener(ItemClickListener itemClickListener){ 
    this.mItemClickListener= itemClickListener; 
} 




public interface ItemClickListener { 
    void onItemClick(View view, int position , long id); 

} 

public interface ToggleInterface { 
    void toggleonClick(View view); 
} 


@Override 
public int getItemViewType(int position) { 
    return position; 
} 

}

Répondre

0

Oui, parce que toutes vos lignes ont la même valeur de la SharedPreferences: boolean tgpref = sharedPreferences.getBoolean("tgpref",true);

Si vous souhaitez enregistrer la valeur pour chaque ligne, vous devez sauvegarder la valeur booléenne avec la touche + la position comme: editor.putBoolean("tgprefAtPosition0", true);

Après cela, vous pouvez obtenir la valeur booléenne pour chaque position comme: boolean tgpref = sharedPreferences.getBoolean("tgprefAtPosition"+ position ,true);