我尝试更改SharedPreference
在我的适配器中设置的MainActivity
。因此,我认为使用MainActivity
的实例可以从那里访问和更改它。当单击一个项目时,会弹出一个对话框,然后在确认时,变量应存储在SharedPreference
中。不幸的是,我在应编辑此变量的部分出现错误:
android.content.SharedPreferences $ Editor 空对象引用上的android.content.SharedPreferences.edit()'
MainActivity
:
public class MainActivity extends AppCompatActivity {
SharedPreferences favE;
int x;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
favE = MainActivity.this.getSharedPreferences("myFavEName",
Context.MODE_PRIVATE);
x = favE.getInt("favKey", 0);
}
public int getFavE(){
return x;
}
}
我的适配器:
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
Context context;
List<GetDataAdapter> getDataAdapter;
MainActivity ma = new MainActivity();
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
GetDataAdapter getDataAdapter1 = getDataAdapter.get(position);
final int a = getDataAdapter1.getId();
int x = ma.getFavE();
holder.cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
addDialog(a);
});
}
public void addDialog(final int a) {
Context context = this.context;
LayoutInflater inflater = LayoutInflater.from(this.context);
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
});
builder.setPositiveButton("Exit Group", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
ma.favE.edit().putInt("favKey", 0)
.apply();
}
});
builder.show();
}
}
答案 0 :(得分:3)
您不需要MainActivity的实例。您可以指定一个构造函数,该构造函数将仅从活动中获取上下文以使用“共享”首选项。因此,当您创建适配器时,会将MainActivity上下文提供给适配器。我认为在您的情况下,因为您正在创建新实例,所以您在正确初始化MainActivity之前使用上下文。因此它给您错误的上下文。 您的构造函数将是这样
public RecyclerViewAdapter(Context context) {
this.context = context;
}