0

私はRecycleViewを持っていて、ユーザーが共有設定でアプリケーションを使用しているときに状態を保存します。私の問題は4日間は解決できませんでした。トグルボタンをひっくり返して、アプリケーションを終了するときに、<を開くと、recycleview内のすべてのTogglebuttonsがチェックされました。 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" 

       /> 

をオフこれは私がそれにトグルボタンを扱う私のアダプタクラスです:

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

}

答えて

0
すべての行が SharedPreferencesから同じ値を持っているので、

はい、: editor.putBoolean("tgprefAtPosition0", true);

後:あなたは、各行の値を保存したい場合はboolean tgpref = sharedPreferences.getBoolean("tgpref",true);

は、次のようなキー+位置とブール値を保存してくださいそれで、各位置のブール値を次のように得ることができます: boolean tgpref = sharedPreferences.getBoolean("tgprefAtPosition"+ position ,true);

関連する問題