将 ImageView 传递给下一个 activity

Pass ImageView to next activity

我已经搜索了好几天了,但我似乎找不到我做错了什么,所以你是我最后的希望!

我有第一张 activity 多张图片。当我按下一个时,我希望第二个 activity 打开时只显示单击的图像。我正在尝试将点击的图像转换为位图,然后按意图发送它,以便我的第二个 activity 可以检索它。

这是我的第一个 Activity 的代码(位图....'drawable' 带有红色下划线,意向.....'this, 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);
            }
        });
    }
}

这是我第二个 Activity:

中的代码
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);
    }

}

您应该只将图像的 source 发送给另一个 activity,这将重新创建 imageview

位图是Parcelable。您可以将可打包对象放入 bundle 或 intent

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

并在另一端回读

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

如果两个 Activity 在同一个应用程序中,您可以只传递 drawable 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);
}