2015-03-03 67 views
0

我一直在搜索,搜索和搜索天,但我似乎無法找到我做錯了什麼,所以你是我最後的希望!將ImageView傳遞到下一個活動

我有我的第一個活動與多個圖像。當我按下一個時,我想要打開第二個活動,只顯示點擊的圖像。我試圖將點擊的圖像轉換爲位圖,然後將其與意圖發送,以便我的第二個活動可以檢索它。

這是我第一個Activity的代碼(位圖....'drawable'以紅色下劃線,所以意圖.....'這個,SubActivity.class')。我究竟做錯了什麼?

public class MainActivity extends ActionBarActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     final ImageView imgview = (ImageView) findViewById(R.id.image); 
     imgview.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       // Haal de drawable op uit de imageview 
       Drawable drawable = imgview.getDrawable(); 

       // Zet de drawable om naar een ByteArray zodat we deze kunnen versturen met een intent 
       // want we kunnen niet zomaar een drawable in een intent gooien 
       Bitmap bitmap = BitmapFactory.decodeResource(drawable); 
       ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
       bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos); 
       byte[] b = baos.toByteArray(); 

       // Maak de intent aan en stuur de ByteArray mee waar de drawable in zit 
       Intent intent; 
       intent = new Intent(this,SubActivity.class); 
       intent.putExtra("witte_tulp_small", b); 
       startActivity(intent); 
      } 
     }); 
    } 
} 

這是我的第二個活動代碼:

public class SubActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_sub); 

     // Intent uitlezen 
     Bundle extras = getIntent().getExtras(); 
     byte[] b = extras.getByteArray("witte_tulp_small"); 

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

     image.setImageBitmap(bmp); 
    } 

} 
+0

在啓動第二個活動時使用包發送圖像數據或與圖像相關的獨特標識 – virendrao 2015-03-03 10:34:53

回答

0

如果這兩個活動都是在同一個應用程序,你可以通過繪製ID:

MainActivity

intent.putExtra("witte_tulp_small", R.id.image); 

SubActivity

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_sub); 

    // Intent uitlezen 
    Bundle extras = getIntent().getExtras(); 

    int resId = extras.getInt("witte_tulp_small"); 
    ImageView image = (ImageView) findViewById(R.id.image); 
    image.setImageResource(resId); 
} 
+0

應該寫什麼而不是「// ...」? – 2015-03-03 13:44:58

+0

對不起,這與您在自己的代碼中具有的findViewById()相同,我將它粘貼到我的答案中。此解決方案無需使用位圖。但是這僅限於兩個活動都在同一個應用中。 – 2015-03-03 14:06:33

+0

好吧,我已經完成了這個工作,我快到了!只有int中的「extras」resId = extras.getInt(「witte_tulp_small」);是紅色的。錯誤說:無法解析符號'額外'。任何想法爲什麼? – 2015-03-03 14:22:05

0

您應該只發送圖像的其他活動,這將重新創建的ImageView

2

位圖是Parcelable。你可以把parcelable對象束或意圖

Intent intent = new Intent(this, SubActivity.class); 
intent.putExtra("bitmap", bitmap); 

和回讀另一端

Bitmap bitmap = (Bitmap) getIntent().getParcelableExtra("bitmap");