【问题标题】:How to acces SharedPrefences from recyclerView adapter?如何从 recyclerView 适配器访问 SharedPreferences?
【发布时间】:2018-05-04 20:09:44
【问题描述】:

我想从我的适配器访问 SharedPrefences,因为我想检查一个变量以将 ImageView 设置为可见或消失。

class MainAdapter extends RecyclerView.Adapter<MainAdapter.ViewHolder> implements View.OnClickListener, View.OnLongClickListener{


ArrayList<String> mData;
public ImageView mMinus;
public static final String SHARED_PREFS_DATA = "sharedPrefsData";



public MainAdapter(ArrayList<String> data) {
        mData = data;
}



@NonNull
@Override
public MainAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row, parent, false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull MainAdapter.ViewHolder holder, int position) {
    holder.mText.setText(mData.get(position));

    SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS_DATA, 0);
    int a = sharedPreferences.getInt("visible", 0);
    if(a == 0)
       holder.mMinus.setVisibility(View.GONE);
    else
       holder.mMinus.setVisibility(View.VISIBLE); 

}

错误:找不到符号方法 getSharedPreferences(String,int)

【问题讨论】:

  • 适配器没有getSharedPreferences 方法。先检查哪个类有这个方法。
  • 在适配器内部使用 SharedPreferences 似乎是个坏主意,你为什么要这样做?

标签: android sharedpreferences android-recyclerview


【解决方案1】:

1.将contextActivity传递到adapter,使用这个context可以访问shared preferences

2.您也可以传递Activity 引用而不是Context

【讨论】:

  • 另一个好的解决方案是在适配器中使用 ApplicationContext 而不是传递上下文,通过在项目中创建应用程序类来避免实际可能的内存泄漏。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-07
  • 1970-01-01
  • 2016-03-31
  • 2012-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多