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