将imageView传递给新活动imageView

时间:2017-11-13 18:37:52

标签: android

目前,我的应用允许用户点击“默认头像图片”,然后从一组图片中进行选择。然后通过“startActivityForResult”将该图像返回到第一个活动。我的下一个任务是拍摄现在在第一个活动中设置的图像,并在用户按下“提交按钮”时将其发送到第三个活动。现在,我正在尝试下面的代码,但它不起作用,因为我不知道用户选择哪个图像,直到它被选中。任何人都可以帮助我吗?

    findViewById(R.id.buttonSubmit).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(MainActivity.this, DisplayActivity.class);
            Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.select_avatar);
            intent.putExtra("IMAGE", bitmap);
            startActivity(intent);
        }
    });

             //second activity
             Bitmap bitmap = intent.getParcelableExtra("Bitmap");
             imageViewAvatar.findViewById(R.id.imageViewFinalAvatar);
             imageViewAvatar.setImageBitmap(bitmap);

3 个答案:

答案 0 :(得分:2)

您只需将ImageViewId用作整数值,然后传递即可。无需使用任何位图。

int imageID = R.drawable.select_avatar;

findViewById(R.id.buttonSubmit).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(MainActivity.this, DisplayActivity.class);
            intent.putInt("image_id", imageID); // Integer Value
            startActivity(intent);
        }
    });

//second activity
Intent intent = getIntent();
int imageIdValue = intent.getIntExtra("image_id", 0);

imageViewAvatar.setImageResource(0);
imageViewAvatar.setImageResource(imageIdValue);

答案 1 :(得分:1)

如果您需要在其他活动中收到 ImageView ,则可能会在您的应用未来中遇到可扩展性问题。

如果您在所选的第一个活动中显示了头像图片,那么该可绘制的选择内容可以保存在Shared Preferences等本地存储中,然后保存在第二个活动中以及您拥有的任何其他活动中在未来,您也可以从 SharedPreferences 中检索该值,例如:

存储您的Drawable idName :(您 DON' T 想要存储 int id ,因为如果您添加更多drawable并且以后打破您的应用,则ID会更改

int[] drawablesArray = {R.id.monkey, R.id.balloon};
int id = drawablesArray[imageSelectedIndex];
String idName = getResources().getResourceEntryName(id);

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(YourActivityName.this);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("avatarPicture",idName);
editor.apply();

在第二个活动上检索您的Drawable idName

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(YourActivityName.this);
int avatarPicture = preferences.getString("avatarPicture", "");
if(!avatarPicture.isEmpty())
{
    imageView2ndActivity.setBackgroundResource(getResources().getIdentifier(idName, "drawable", getPackageName()));
}

希望它有所帮助。

答案 2 :(得分:0)

可能您错过了从其他活动获取结果的知识,请参阅official文档。 必须通过名为onActivityResult的方法(链接中的示例)调用必须接收信息的第二个Activity

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // Check which request we're responding to
    if (requestCode == PICK_CONTACT_REQUEST) {
        // Make sure the request was successful
        if (resultCode == RESULT_OK) {
            // The user picked a contact.
            // The Intent's data Uri identifies which contact was selected.

            // Do something with the contact here (bigger example below)
        }
    }
}

通常在现实生活中,开发人员使用EventBusOttoRxJava(最后一个陡峭的学习曲线)