android - 我想在图像选择器 Intent 中添加 "remove"选项

标签 android android-intent

我想在图像选择器 Intent 中添加删除选项,我成功添加了画廊选项和相机选项,它们工作正常,但我想添加删除选项,如果我选择删除选项,图像应该从 imageview 中删除。

提前致谢:)

我的代码:

public void edit_profile_pic(View view) {
    Uri uri = null;
    Intent GalleryIntent = new Intent(Intent.ACTION_PICK,
            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    Intent CameraIntent =new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    CameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
    Intent chooserIntent = Intent.createChooser(CameraIntent, "Choose");
    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] {GalleryIntent, CameraIntent});
    startActivityForResult(chooserIntent, RESULT_LOAD_IMG);
}

@Override
   protected void onActivityResult(int requestCode, int resultCode, Intent data) 
   {
       ImageView imageView = (ImageView) findViewById(R.id.profile_profile_picture);
       if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK)
       {
           Bitmap bitmap = null;
           if(data.getData()!=null)
           {
               try 
               {
                   InputStream stream = getContentResolver().openInputStream(data.getData());
                   bitmap = BitmapFactory.decodeStream(stream);
                   stream.close();
                   imageView.setImageBitmap(bitmap);
               }
               catch (Exception e)
               {
                   e.printStackTrace();
               }
           } 
           else 
           {
               bitmap=(Bitmap) data.getExtras().get("data"); 
               imageView.setImageBitmap(bitmap);
           }

           super.onActivityResult(requestCode, resultCode, data);
       }
   }

最佳答案

我能够通过创建一个主题为 NoDisplay 的新 Activity 来使用 Intent 选择器来做到这一点,如下所示:

首先创建将用于通知主 Activity 用户要删除图像的 Activity :

public class DeleteProfileImageActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Intent resultIntent = new Intent();
        resultIntent.putExtra("remove_image", true);
        setResult(Activity.RESULT_OK, resultIntent);
        finish();
    }
}

您可以在 list 中指定图标和标签。确保您还将主题设置为 NoDisplay,以避免它用 Intent 选择器掩盖实际 Activity 。

<activity
    android:name=".activity.profilesetup.DeleteProfileImageActivity"
    android:label="@string/title_activity_delete_profile_image"
    android:icon="@drawable/ic_delete_image_red"
    android:theme="@android:style/Theme.NoDisplay"
    />

然后您可以将其添加到 Intent 选择器中。我检查之前是否设置了图像,以避免在没有图像时添加选项。

if (imageSet) {
    Intent removeImageIntent = new Intent(activity, DeleteProfileImageActivity.class);
    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] {removeImageIntent} );
}

然后您可以使用 DeleteProfileImageActivity 中指定的键监听 Intent 数据的 Activity 结果,当前为 remove_image

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (data.hasExtra("remove_image") && imageSet) {
        // remove/reset the image here
    }
}

关于android - 我想在图像选择器 Intent 中添加 "remove"选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28941834/

相关文章:

android - 错误 : The prefix "tools" for attribute "tools:overrideLibrary" associated with an element type "uses-sdk" is not bound

java - 如何在Android上防止键盘推送webview

android - REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 触发但无提示

android - 通过 Intent 将类对象传递给android中的广播接收器

android - ActivityNotFoundException : No Activity found to handle Intent { act=android.intent.action.VIEW dat=文件:///mnt/sdcard/testdata5.pdf

android - 内存不足错误 : backgroud drawable - Android

android - 为什么需要类别 HOME?

android - 从另一个 Activity 回来后如何保持 Activity 中的值(value)

android - 如何围绕 20 分钟的 http session 构建我的 android 应用程序

android - 如何处理intet ://links in Android webview