我想知道如何在适配器中获取上下文?
我正在尝试在我的适配器中使用SharedPreferences,但是我需要获取上下文以便它可以工作。
public class ImgAdapter extends BaseAdapter {
private Context mContext;
private ColorMatrixColorFilter cf;
String Question = Question.Pref;
public ImgAdapter(Context c) {
mContext = c;
ColorMatrix matrix = new ColorMatrix();
matrix.setSaturation(0); //0 means grayscale
cf = new ColorMatrixColorFilter(matrix);
}
public int getCount() {
return mThumbIds.length;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
public View getView(int position, View convertView, ViewGroup parent) {
//SharedPreferences pref = context.getSharedPreferences(Question, context.MODE_PRIVATE);
---- "I'm trying to use SharedPreferences in there" ----
ImageView imageView;
imageView = (ImageView) convertView;
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(80, 80));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setAdjustViewBounds(true);
imageView.setImageResource(mThumbIds[position]);
if(Question.answered){
imageView.setColorFilter(cf);
imageView.setAlpha(175);
}
return imageView;
}
public static Integer[] mThumbIds =
{
R.drawable.question1,
R.drawable.question2,
};
}
当我尝试这样做时:
public View getView(int position, View convertView, ViewGroup parent, Context context) {
SharedPreferences pref = context.getSharedPreferences(Question, context.MODE_PRIVATE);
我得到The type ImgAdapter must implement the inherited abstract method Adapter.getView(int, View, ViewGroup)
有可能这样做吗?若有,有人可以帮助我吗?
答案 0 :(得分:1)
public View getView(int position,View convertView,ViewGroup parent, 上下文上下文){SharedPreferences pref = context.getSharedPreferences(Question,context.MODE_PRIVATE);
因为您的方法签名错误。您有一个额外的参数Context
,它与从超类继承的方法签名不匹配。
看你有这个:
public View getView(int po, View row, ViewGroup parent, Context context) { ... }
必须是:
public View getView(int position, View row, ViewGroup parent) { ... }
从方法签名中删除Context参数,它将起作用。请注意,您可以访问mContext变量,并且可以执行此操作:
SharedPreferences pref = mContext.getSharedPreferences(...);
希望它能帮助您解决您所面临的问题。
答案 1 :(得分:0)
您无法以这种方式实现getView()方法。
你已经准备就绪了吗?
private Context mContext;
在您的偏好中使用此上下文,如下面的
SharedPreferences pref = context.getSharedPreferences(Question, mContext.MODE_PRIVATE);
答案 2 :(得分:0)
mContext @ Stav L替换
SharedPreferences pref = context.getSharedPreferences(Question, context.MODE_PRIVATE);
到
SharedPreferences pref = mContext.getSharedPreferences(Question, mContext.MODE_PRIVATE);
答案 3 :(得分:0)
您确定要将正确类型的Context传递给适配器吗?如果要从Activity创建适配器实例,则需要将关键字this传递给Adapter的构造函数。如果它来自片段,则需要将getActivit()传递给构造函数。
来自活动:
ImageAdapter imageAdapter = new ImageAdapter(this);
来自片段:
ImageAdapter imageAdapter = new ImageAdapter(getActivity());
您需要检查您发送的上下文类型。以上应该完全正常。确保您使用上述之一,而不是getApplicationContext
或类似的任何内容。
答案 4 :(得分:0)
通常,在getView()方法中不需要任何Context引用,因为它已经为您提供了Context。见父母?这是你的背景:
parent.getContext()
就是你所需要的。 : - )
另一个要点:你的getView()实现似乎非常低效,如果不是说错。请使用ViewHolder模式并观看此视频:https://www.youtube.com/watch?v=wDBM6wVEO70