首页 文章

Android:如何将SharedPreferences计数器设置为RecyclerView TextView?

提问于
浏览
1

我有一个Activity,按钮单击将一组用户输入数据保存到SQLite数据库,然后在RecyclerView列表中填充CardView . 我想创建一个以默认值零开始的计数器,并在每次单击“保存”按钮(创建一个新的CardView)时递增1,然后将该计数器输出到RecyclerView列表中的CardView .

我在OnBindViewHolder方法的适配器文件中得到Android Studio错误,在它的最后一行开始“holder ...”我如何获得从Activity到Adapter文件的Context?我认为getSharedPreferences()允许全局Context而getPreferences()不起作用 .

我使用Activity文件中的SharedPreferences设置计数器,点击按钮:

public class Activity extends AppCompatActivity {
...
    public void onClickSave(View v) {
    ...
    int totalcount = 0;
    SharedPreferences sp = getSharedPreferences("Share_Prefs",Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sp.edit();
    editor.putInt("int_key", ++totalcount);
    editor.apply();

RecyclerView适配器文件具有以下代码:

public class Adapter extends RecyclerView.Adapter<Adapter.ListViewHolder> {
    ....
    Context context;
    ....
    public Adapter(Context context, List<UserData> dbList) {
    this.context =  context;

    public class ListViewHolder extends RecyclerView.ViewHolder {

        TextView cardBlankTextNums; 

        public ListViewHolder(View itemView) {
        super(itemView);

        cardBlankTextNums = (TextView)itemView.findViewById(R.id.cardBlankTextNums);

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

    @Override
    public void onBindViewHolder(final ListViewHolder holder, final int position) {

    int totalcount = 0;

    holder.cardBlankTextNums.setText(dbList.get(position).getSharedPreferences.edit.getInt("int_key",totalcount));

1 回答

  • 0

    getSharedPreferences 适用于 Context ,由于您的适配器没有,因此无法解析名称,因此需要将上下文传递给适配器类 . 最好在构造函数中执行此操作:

    public class Adapter extends RecyclerView.Adapter<Adapter.ListViewHolder> {
    
        private Context mContext;
    
        public Adapter (Context context)
        {
            mContext = context;
        }
    
        ...
    
    public void onBindViewHolder(final ListViewHolder holder, final int position) {
    
        holder.cardBlankTextNums.setText(mContext.getSharedPreferences("Share_Prefs",Context.MODE_PRIVATE).getInt("int_key",totalcount));
    

    当您想要实例化新的适配器时,您需要传递上下文 . 例如,如果您在活动中,则需要执行以下操作:

    Adapter newAdapter = new Adapter(this);
    

    如果你是一个片段,你需要做:

    Adapter newAdapter = new Adapter(getActivity());
    

相关问题