0

Ich habe eine RecycleView und ich möchte den Zustand speichern, wenn Benutzer die App über gemeinsame Einstellungen existieren. Mein Problem, das ich es für 4 Tage nicht lösen konnte, ist, wenn ich den Toggle Knopf knacke und die App < verlasse, wenn ich es wieder öffne, finde ich, dass alle Togglebuttons in der recycleview geprüft werden, nicht nur das spezifische, das ich überprüfte und umgekehrt mitversuchen speichern Status der Schaltfläche im recycleview

ToggleButton in xml unchecking

<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" 

       /> 

das ist mein Adapter-Klasse, die ich auf den Schalter in damit umgehen:

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; 
} 

}

Antwort

0

Ja, weil alle Ihre Zeilen denselben Wert aus dem SharedPreferences haben: boolean tgpref = sharedPreferences.getBoolean("tgpref",true);

Wenn Sie den Wert für jede Zeile speichern möchten, sollten Sie den Booleschen Wert mit der Taste + Position wie sparen: editor.putBoolean("tgprefAtPosition0", true);

Nach das, Sie können den booleschen Wert für jede Position wie erhalten: boolean tgpref = sharedPreferences.getBoolean("tgprefAtPosition"+ position ,true);

Verwandte Themen