【问题标题】: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

中的 xml imageView
  <ImageView
                android:paddingTop="30dp"
                android:layout_gravity="center"
                android:layout_width="330dp"
                android:layout_height="wrap_content"
                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 所说的那样。

标签: java android image android-camera


【解决方案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.&lt;your_image&gt;)
      • 把这行放在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;
              }
       }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-23
        • 1970-01-01
        • 2021-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多