OnActivityResult不响应DialogFragment

时间:2015-10-15 13:48:37

标签: android android-layout android-fragments android-intent android-activity

我有一个DialogFragment弹出,要求用户选择拍照,或从图库中选择一个。当我打开图库并选择图像时,没有任何反应,OnActivityResult不响应。是因为DialogFragment类在选择图像后很快就会关闭,而没有时间通过​​OnActivityResult类?

这是DialogFragment类的onCreateDialog:

public class PhotoFragment extends DialogFragment {


public  static final int SELECT_PHOTO = 100;

public Bitmap image;


public static interface OnCompleteListener {
    public abstract void onComplete(Bitmap image);
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    // Use the Builder class for convenient dialog construction
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setItems(new CharSequence[]
                    {"Take a Photo", "Select Image From Gallery"},
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    // The 'which' argument contains the index position
                    // of the selected item
                    switch (which) {
                        case 0:
                            Intent takePicture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                            startActivityForResult(takePicture, 0);//zero can be replaced with any action code
                            break;
                        case 1:
                            doToast("Picking Image",true);
                            Intent pickPhoto = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                            startActivityForResult(pickPhoto , SELECT_PHOTO);//one can be replaced with any action code
                            break;

                    }
                }
            });
     return builder.create();
}

以下是activityOnResult()的代码(位于同一个类PhotoFragment.java中)

@Override
public void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
    onActivityResult(requestCode, resultCode, imageReturnedIntent);

    doToast("Activity Result", true);
    switch (requestCode) {
        case SELECT_PHOTO:

                Uri selectedImage = imageReturnedIntent.getData();
            InputStream imageStream = null;
            try {
                imageStream = getContext().getContentResolver().openInputStream(imageReturnedIntent.getData());
            } catch (FileNotFoundException e) {
                doToast("Input Stream not found", true);
                e.printStackTrace();
            }
            Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream);
            image = yourSelectedImage;


    }
}

2 个答案:

答案 0 :(得分:1)

确保您的活动中没有onActivityResult。

答案 1 :(得分:0)

在您的活动中添加onActivityResult,然后获取片段并在onActivityResult上调用片段。例如:

if(iOS_version > 3){
    // Open something
}