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