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

时间:2016-05-04 05:26:35

标签: android sharedpreferences android-recyclerview

我有一个Activity,按钮单击将一组用户输入数据保存到SQLite数据库,然后在RecyclerView列表中填充CardView。我想创建一个以默认值零开始的计数器,并在每次"保存"时增加+1。单击按钮(创建一个新的CardView),然后将该计数器输出到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 :(得分: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());