2015-09-07 48 views
-2

這是一個簡單的圖庫程序。我已將代碼切割爲回答問題所需的必要部分。我的問題是爲什麼上下文沒有被初始化,然後怎麼知道下面的代碼中的上下文引用是什麼?在下面的代碼中,上下文是指什麼?

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

之前,它可能有助於理解*什麼是上下文。因此,您可能有興趣閱讀以下內容:http://stackoverflow.com/questions/3572463/what-is-context-in-android – GMax

回答

0

在您的代碼中,您有:

new ImageAdapter(this); 

this引用當前類GalleryActivity。 GalleryActivity是一個Activity,Activity是Context的一個子類。因此,您正在使用Context調用ImageAdapter構造函數。然後,在您的構造函數中,存儲對該上下文的引用,context = c。實際上,context現在指向一個Context,它是一個Activity。

您不需要顯式實例化Context,因爲Android系統已經爲您提供了一個有效的Activity實例,並且由於Activity是一種Context,因此您有一個有效的Context。

+0

因此,在該行中: ImageView imageView = new ImageView(context); imageViews正在內部活動中構建?或畫廊? – hayden

+0

好吧,一旦GalleryActivity正在運行,就會設置'gallery'的圖像適配器。然後根據畫廊的哪一部分顯示,getView將被調用,並顯示需要顯示的視圖。此時圖像視圖被創建並且圖像被設置爲該視圖。您應該知道該圖庫是類型庫,也是AdapterView。有關於ListView的一些指南可以證明對您有用 – vman

1

context沒有初始化,因爲當你instatiate的ImageAdapter類,你必須設置context,例如:

ImageAdapter myImageAdapter = new ImageAdapter(getApplicationContext()); 

然後裏面的ImageAdapter類的,你會利用context變量:

ImageView imageView = new ImageView(context); 
+1

在'getApplicationContext'函數之後添加了缺少的'()' –