SharedPreferences в RecyclerView - PullRequest
       16

SharedPreferences в RecyclerView

0 голосов
/ 20 апреля 2020

Я новичок в программировании и у меня проблема. Я не хочу сохранять Integer clicks с sharedPreferences, чтобы я мог сохранить состояние своей кнопки mButton, но я не могу этого сделать. Так что, возможно, вы, ребята, могли бы помочь мне. Я знаю, что это много, но я действительно начинаю впадать в отчаяние.

Вот мой код. Я также пытаюсь назначить общие префы внутри класса RecyclerView.Adapter.

public class ExampleAdapter extends 
RecyclerView.Adapter<ExampleAdapter.ExampleViewHolder> {
private ArrayList<MyItem> mExampleList;
Context mContext;
SharedPreferences sharedPreferences;
private Button mButton;
private int clicks = 0;





public static class ExampleViewHolder extends RecyclerView.ViewHolder {
    private TextView mTextView;



    public ExampleViewHolder(View itemView) {

        super(itemView);
        mTextView = itemView.findViewById(R.id.tv_country);


    }

}



public ExampleAdapter(ArrayList<MyItem> exampleList, Context context) {
    mContext = context;

    mExampleList = exampleList;
}

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


        View v = 
LayoutInflater.from(parent.getContext()).inflate(R.layout.example_item, 
parent, 
false);

        ExampleViewHolder evh = new ExampleViewHolder(v);


        mButton = v.findViewById(R.id.tv_button);
        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                clicks=clicks+1;



                int previousclicks=sharedPreferences.getInt("totalclick",0);   


                if (clicks % 2 == 0)
                    mButton.setBackgroundResource(R.drawable.button_green);
                else
                    mButton.setBackgroundResource(R.drawable.button_red);
            }
        });



    return evh;
}

@Override
public void onBindViewHolder(ExampleViewHolder holder, int position) {
    MyItem currentItem = mExampleList.get(position);
    holder.mTextView.setText(currentItem.getTaskText());
    sharedPreferences = 
mContext.getSharedPreferences("click_sharedpreference",Context.MODE_PRIVATE);
}

@Override
public int getItemCount() {
    return mExampleList.size();
}
}

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

Вам необходимо передать контекст для sharedPreference в конструкторе ExampleAdapter

private mContext;
SharedPreferences sharedPreference ;
public ExampleAdapter(ArrayList<MyItem> exampleList,Context context) {
    mExampleList = exampleList;
    mContext=context;
}

создать SharedPreference в onBindViewHolder метод

@Override
public void onBindViewHolder(ExampleViewHolder holder, int position) {
       MyItem currentItem = mExampleList.get(position);
       holder.mTextView.setText(currentItem.getTaskText());

sharedPreference=mContext.getSharedPreferences("click_sharedpreference",MODE_PRIVATE);   
}

установить значение общего предпочтения в onclick кнопки

 mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                clicks=clicks+1;


//if sharedPreference doesn't contain totalclick you will get default value 0
//if it contains then you will get the previous clicks 
//then add those clicks to current clicks

int previousclicks=sharedPreference.getInt("totalclick",0);   //default 0 click         

sharedPreference.edit().putInt("totalclick",previousclicks+clicks).commit();



if (clicks % 2 == 0) 
   mButton.setBackgroundResource(R.drawable.button_green);    
else
 mButton.setBackgroundResource(R.drawable.button_red);
}
});
0 голосов
/ 20 апреля 2020

сначала создайте пользовательский класс sharedPreferences

    import android.content.Context;
    import android.content.SharedPreferences;

    public class SavePref {

        private Context context;

        public SavePref(Context context){
            this.context = context;
        }

      public static void saveInt(String key, int value) {

         SharedPreferences sharedPref = 
        PreferenceManager.getDefaultSharedPreferences(context)
        SharedPreferences.Editor editor = sharedPref.edit();
        editor.putInt(key, value);
        editor.commit();
      }
 }

, теперь создайте cunstroctor для вашего адаптера:

   public static class ExampleViewHolder extends RecyclerView.ViewHolder {
      privare SavePref savePref;
      public ExampleViewHolder(SavePref savePref){ 
        this.savePref = savePref;
       }
  }

, затем вы можете использовать savePref в своем коде для сохранения целого числа в sharedPreferences

mButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            clicks++;
            savePref.saveInt("clickNumber",clicks)

            if (clicks % 2 == 0) {
                mButton.setBackgroundResource(R.drawable.button_green);
            }else
                mButton.setBackgroundResource(R.drawable.button_red);
        }
    }); 
...