在适配器中获取上下文

时间:2014-08-04 09:41:16

标签: android sharedpreferences adapter android-context

我想知道如何在适配器中获取上下文?

我正在尝试在我的适配器中使用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)

有可能这样做吗?若有,有人可以帮助我吗?

5 个答案:

答案 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