我有一个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));
答案 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());