2011-02-06 51 views
7

使用Hello World Gridview教程示例,我試圖在點擊時全屏顯示圖像,而不是顯示圖像在數組中的位置。由於我不熟悉Android,這是我第一次嘗試使用它,所以我不知所措。我很熟悉Java雖然,我試着做這樣的事情(不工作明顯):在Android教程應用上製作全屏圖像

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    GridView gridview = (GridView) findViewById(R.id.gridview); 
    gridview.setAdapter(new ImageAdapter(this)); 

    gridview.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
      showImage(v, position); 
      Toast.makeText(HelloAndroid.this, "" + parent.getId(), Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 

private void showImage(View view, int position) { 
    ImageView imgView = (ImageView) view; 
    imgView.setImageResource(position);  
} 

但應用程序崩潰(強制關閉)。有任何想法嗎?

Here is the tutorial app I am using

+0

你得到了什麼確切的錯誤? LogCat說什麼? – John 2011-02-06 18:47:13

+0

它在imgView.setImageResource處拋出一個空指針。感謝關於logcat的提示,我只是使用普通的調試器。至少現在我可以看到冗長的錯誤:) view.getId()是-1順便說一句。 – Organiccat 2011-02-06 18:55:53

回答

23
imgView.setImageResource(position); 

這是因爲你沒有正確使用它給你一個錯誤。該參數應該指向圖像的資源ID(它是一個int),例如R.id.imageid。即使你提供了正確的資源ID,你想做的事情也不會奏效。

要獲得正確的資源ID,您需要調用視圖的適配器並使用getItemId(position)方法獲取正確的資源ID。在ImageAdapter中,如果您更改getItemId()方法以返回mThumbsIds[position]而不是0(如Google示例中所示)。

但是,爲了實現您的結果,我建議您創建一個新的活動,並像這樣加載圖像。

例如:

gridview.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
     long imageId = (ImageAdapter)parent.getAdapter.getItemAt(position); 

     Intent fullScreenIntent = new Intent(v.getContext(), FullScreenImage.class); 
     fullScreenIntent.putExtra(thisClassName.class.getName(), imageId); 

     thisClassName.this.startActivity(fullScreenIntent); 
    } 
}); 

假設你創建一個full_image.xml佈局文件,只包含與"fullImage"一個id的ImageView的,你FullScreenImage類應該是這樣的:

public class FullScreenImage extends Activity 
{ 
    protected void onCreate(Bundle savedInstanceState) { 
     setContentView(R.layout.full_image); 
     Intent intent = getIntent(); 
     long imageId = intent.getExtras().get(thisClassName.class.getName()); 
     ImageView imageView = (ImageView) v.findViewById(R.id.fullImage); 

     imageView.setLayoutParams(new ViewGroup.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT)); 

     imageView.setImageResource(imageId); 
     imageView.setScaleType(ImageView.ScaleType.FIT_XY); 
    } 
} 

沿着這些東西行應該適合你,並進行一些調整。請確保您在AndroidManifest.xml文件中將FullScreenImage添加爲<activity>

0

在這裏,你正在做,這是該視圖的ID 點擊(在view參數傳遞),並用它來再次查找自身:

ImageView imgView = (ImageView) findViewById(view.getId()); 

這使得沒有意義,特別是因爲點擊的視圖顯然沒有ID,導致findViewById返回null

你可能想通過你ImageView而不是ID:

ImageView imgView = (ImageView) findViewById(R.id.whatever_the_id_of_the_image_view_is); 
+0

雖然v是我的ImageView,但我在調試器中檢查過,它顯示在那裏,但它沒有mID(這似乎是id,因爲如果我嘗試使用parent.getId()就會出現這種情況。 ImageView是一個在代碼中生成的動態對象,它是GridView的數據組成,如果有幫助的話。 – Organiccat 2011-02-06 19:16:51