尝试在recycleview中保存切换状态按钮

时间:2017-08-28 20:49:15

标签: android android-recyclerview sharedpreferences togglebutton

我有一个RecycleView,我想通过共享首选项在用户存在应用程序时保存它的状态。我无法解决它4天的问题是,当我按下Toggle按钮并退出App<当重新打开它时,我发现在循环视图中的所有Togglebutton都被检查了,不仅是我检查的特定一个,反之亦然,取消选中

xml中的T​​ogglebutton

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

                />

这是我的Adapter类,我在其中处理切换按钮:

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

}

1 个答案:

答案 0 :(得分:0)

是的,因为您的所有行都具有SharedPreferencesboolean tgpref = sharedPreferences.getBoolean("tgpref",true);

中相同的值

如果要保存每行的值,则应使用键+位置保存布尔值,如: editor.putBoolean("tgprefAtPosition0", true);

之后,您可以获得每个位置的布尔值,如: boolean tgpref = sharedPreferences.getBoolean("tgprefAtPosition"+ position ,true);