如果未选择图像,如何将默认图像传递给先前的活动
Posted
技术标签:
【中文标题】如果未选择图像,如何将默认图像传递给先前的活动【英文标题】:How to pass default image to previous activity if no image is selected 【发布时间】:2016-04-22 20:38:01 【问题描述】:在我的应用程序中,我有一个相机功能。用户可以捕获图像或从图库中选择。
活动 B
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode)
case RESULT_LOAD_IMAGE:
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK & null != data)
selectedImage = data.getData();
imageView.setImageURI(selectedImage);
break;
case REQUEST_IMAGE_CAPTURE:
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK)
try
selectedImage = imageUri;
getContentResolver().notifyChange(selectedImage, null);
imageView.setImageURI(null);
imageView.setImageURI(imageUri);
catch (Exception e)
Toast.makeText(this, "Failed to load", Toast.LENGTH_SHORT)
.show();
submit.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
Intent returnIntent = new Intent();
if(selectedImage!=null)
returnIntent.putExtra("img_uri", selectedImage.toString());
setResult(Activity.RESULT_OK, returnIntent);
finish();
);
当提交按钮被点击时,它会返回到之前的活动。
活动 A
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
if (resultCode == RESULT_OK)
if (requestCode == PROJECT_REQUEST_CODE)
imgURI = Uri.parse(data.getStringExtra("img_uri"));
if (mClickedPosition == -1)
if (obj != null)
obj.addNewItem(imgURI);
else
if (obj != null)
obj.changeItem(mClickedPosition, imgURI);
我现在的问题是如何将默认图像传递给 Activity A If 用户没有选择任何图像?
这是 Activity B
中的 xmlimageView
<ImageView
android:paddingTop="30dp"
android:layout_gravity="center"
android:layout_
android:layout_
android:adjustViewBounds="true"
android:src="@mipmap/no_image"
android:scaleType="fitXY"
android:id="@+id/imageView"
android:layout_weight="0.50" />
如果没有选择图像,我希望@mipmap/no_image
返回活动 B。可以吗?谢谢。
【问题讨论】:
添加到switch
default
并设置图片。
@dieter_h 我应该在哪里添加开关默认值?活动 A ?
URI 是字符串的子类。您的代码中的默认 URI 在哪里?
@danny117 我应该把 URI 放在哪里?在活动 A 或 B
就像@Rajesh 所说的那样。
【参考方案1】:
您可以通过以下方式传递存储在资源中的图像的 Uri:
submit.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
Intent returnIntent = new Intent();
if(selectedImage!=null)
returnIntent.putExtra("img_uri", selectedImage.toString());
else
returnIntent.putExtra("img_uri", Uri.parse("android.resource://your.package.name/mipmap/no_image").toString());
setResult(Activity.RESULT_OK, returnIntent);
finish();
);
然后你可以像往常一样使用 Uri 在ImageView
中显示图像。
【讨论】:
【参考方案2】:ByDefault 将selectedImage
的值设置为“默认”。
现在在您的addNewItem()
和changeItem()
检查imageUri
中传递的值
if(imageUri.equalsIgnoreCase("default"))
// set your default image that is @mipmap/no_image
else
// set image you are getting from imageUri
【讨论】:
【参考方案3】:代码:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode)
case RESULT_LOAD_IMAGE:
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK & null != data)
selectedImage = data.getData();
imageView.setImageURI(selectedImage);
else
//set default
break;
case REQUEST_IMAGE_CAPTURE:
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK)
try
selectedImage = imageUri;
getContentResolver().notifyChange(selectedImage, null);
imageView.setImageURI(null);
imageView.setImageURI(imageUri);
catch (Exception e)
Toast.makeText(this, "Failed to load", Toast.LENGTH_SHORT)
.show();
else
//set default
default
//set default
【讨论】:
感谢您的回答。但是你能告诉我如何将 "@mipmap/no_image 设置为 imageView 吗? 添加图片到drawable
[hdpi, xhdpi, etc] 文件夹,然后设置imageView.setImageResource(R.drawable.<your_image>)
把这行放在else里面?
如果要设置默认图片
如果没有选择图像,如何在Activity A中返回默认图像?【参考方案4】:
您不需要将默认图像返回给 Activity A。就像其他人写的那样,您只需为用户未选择任何图像时的条件做好准备。 像这样修改活动 A 的 onActivityResult:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
if(data!=null)
switch (requestCode)
case RESULT_LOAD_IMAGE:
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK)
selectedImage = data.getData();
imageView.setImageURI(selectedImage);
break;
case REQUEST_IMAGE_CAPTURE:
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK)
try
selectedImage = imageUri;
getContentResolver().notifyChange(selectedImage, null);
imageView.setImageURI(imageUri);
catch (Exception e)
Toast.makeText(this, "Failed to load", Toast.LENGTH_SHORT).show();
break;
default:
//Your default image goes here, when the user doesn't select either of the two options
imageView.setImageResource(R.drawable.<default_image>);
break;
【讨论】:
以上是关于如果未选择图像,如何将默认图像传递给先前的活动的主要内容,如果未能解决你的问题,请参考以下文章
Android Studio - 选项卡式活动如何将片段重置为默认视图?