上下文在下面的代码中引用了什么?

时间:2015-09-07 19:52:35

标签: android

这是一个简单的画廊计划。我已将代码剪切为回答问题所需的必要部分。我的问题是为什么没有初始化上下文,然后如何知道下面的代码中的上下文引用是什么?

public class GalleryActivity extends Activity { 

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);        
    gallery.setAdapter(new ImageAdapter(this));
    gallery.setOnItemClickListener(new OnItemClickListener()
    {
        public void onItemClick(AdapterView<?> parent, View v,
        int position, long id)
        {
            myImageView.setImageResource(imageIDs[position]);
        }
    });
}

public class ImageAdapter extends BaseAdapter
{
    Context context;
    public ImageAdapter(Context c)
    {
        context = c;   
    }

    public View getView(int position, View convertView, ViewGroup parent) {

        ImageView imageView = new ImageView(context);
        imageView.setImageResource(imageIDs[position]);
        return imageView;
    }
  }
}

2 个答案:

答案 0 :(得分:1)

context未初始化,因为当您设置ImageAdapter课程时,您必须设置context,例如:

ImageAdapter myImageAdapter = new ImageAdapter(getApplicationContext());

然后在ImageAdapter类内部,您将使用context变量:

  ImageView imageView = new ImageView(context);

答案 1 :(得分:0)

在您的代码中,您有:

new ImageAdapter(this);

this指的是当前的类GalleryActivity。 GalleryActivity是一个Activity,Activity是Context的子类。因此,您使用Context调用ImageAdapter构造函数。然后,在构造函数中存储对该上下文context = c的引用。实际上,context现在指向一个Context,它是一个Activity。

您不需要显式实例化Context,因为Android系统已经为您提供了有效的Activity实例,并且由于Activity是一种Context,因此您拥有有效的Context。