2014-02-20 258 views
2

我有一個網格視圖當我點擊一個項目網格視圖內,它去到另一個活動,並認爲它有我的代碼是這樣的:傳遞圖片從一個活動到另一個活動

gridView.setAdapter(new ImageAdapter(this)); 
gridView.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View v, int position, 
       long id) { 
      // TODO Auto-generated method stub 
      Intent i = new Intent(getApplicationContext(), MainActivity.class); 
       // passing array index 
       i.putExtra("id", position); 
       startActivity(i); 
     } 
}); 

活動這我即將查看

Intent i = getIntent(); 
// Selected image id 
int position = i.getExtras().getInt("s"); 
ImageAdapter imageAdapter = new ImageAdapter(this); 
ImageView imageView = (ImageView) findViewById(R.id.imageView1); 
imageView.setImageResource(imageAdapter.moodpic[position]); 
+0

您沒有傳遞任何名爲'「s」'的東西。 –

+0

那麼問題是什麼? – Piyush

+0

我得到了一個錯誤null異常無法運行的活動 –

回答

3

您試圖在此處使用錯誤的鑰匙來獲取額外的getInt("s")

嘗試此

int position = getIntent().getIntExtra("id",0); 
+0

我得到了它的謝謝 –

+0

你最wlcm! –

0

第一轉換圖像轉換成字節數組,然後通入意向和在下一個活動獲得從包字節數組,轉換爲圖像(位圖),並設置成ImageView的。

轉換位圖字節數組: -

Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); 
// Bitmap bmp = BitmapFactory.decodeFile(path); You can use this also. 
    ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
    bmp.compress(Bitmap.CompressFormat.PNG, 100, stream); 
    byte[] byteArray = stream.toByteArray(); 

通行證字節數組到意圖: - 從捆綁

Intent intent = new Intent(this, NextActivity.class); 
intent.putExtra("picture", byteArray); 
startActivity(intent); 

獲取字節數組,轉換成位圖圖像: -

Bundle extras = getIntent().getExtras(); 
byte[] byteArray = extras.getByteArray("picture"); 

Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length); 
ImageView image = (ImageView) findViewById(R.id.imageView1); 
image.setImageBitmap(bmp); 

2)先保存圖像到SD卡,並在接下來的活動設置此圖片爲ImageView的。

3)合格的位圖到意向並得到了來自包下一個活動的位圖,但問題是,如果你的位圖/圖像大小是當時的圖像不會在接下來的活動負載大。

+0

圖片只是在drawable .. –

+0

@JeremiahMe檢查我的答案。 – Piyush

+0

您也可以將其與其他選項一起使用 –

0

我會強烈建議不同的方法。 這是可能的,如果你真的想這樣做,但它的成本大量的內存,也慢。如果你有一箇舊的手機和一個大的位圖,它可能無法正常工作。你可以通過它作爲額外的,例如

intent.putExtra("data", bitmap) 

一個位圖實現Parcelable,所以你可以把它放在一個額外的。同樣,一個包有putParcelable F你想通過它插圖中的活動,我將其存儲在一個文件中。這樣更有效率,而且對你來說工作更少。您可以使用MODE_PRIVATE在數據文件夾中創建任何其他應用無法訪問的私有文件。

1

你應該

int position = i.getExtras().getInt("id" , 0); 

,而不是這個

int position = i.getExtras().getInt("s"); 

這是因爲你已經把「ID」作爲一個重要改變,因此每當你檢索那麼該密鑰必須是相同的,默認int的值將是

相關問題