未调用片段中的OnActivityResult

时间:2015-02-04 19:04:01

标签: android fragment onactivityresult

更新
我已经重新启动了我的设备,现在可以使用了。像魔术一样!

原始问题:
我已经为我的问题读了很多答案,但我仍然无法解决我的问题:
我有一个片段打开捕获照片的意图,在片段中我有OnActivityResults方法,一切正常。 现在,我添加了第二个片段,它也使用相同的代码(但不同的请求代码)调用一个intent。我不确定这会导致问题,但现在,当我推动" V"批准拍摄的照片,我回到不同的片段,并且没有调用OnActivityResults方法。

在片段中:

private static final int REQUEST_TAKE_PHOTO_CODE = 11;
private static final int REQUEST_ATTACH_PHOTO_CODE = 22;

    takePhotoButton = (ImageButton)rootView.findViewById(R.id.imageButtonTakePhoto);

            takePhotoButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(MainActivity.deviceHasCamera){
                        Intent photoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                        startActivityForResult(photoIntent, REQUEST_TAKE_PHOTO_CODE );
                    }
                    else{
                        Toast.makeText(activity, "No camera detected", Toast.LENGTH_SHORT).show();
                    }
                }
            });



  @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Log.d("EB", "onActivityResult CarAccident");
        switch (requestCode) {
            case REQUEST_TAKE_PHOTO_CODE:
                //This case is when the user decide to Approve the captured photo
                if (resultCode == Activity.RESULT_OK) {
                    photo = (Bitmap) data.getExtras().get("data");
                    imageView.setImageBitmap(photo);
                    Log.d("EB", "BitMap = " + photo.toString());
                }
                break;
            case REQUEST_ATTACH_PHOTO_CODE:
                if (resultCode == Activity.RESULT_OK) {
                    Uri selectedImage = data.getData();
                    Log.d("EB", "Uri fata.getData() = " + data.getData().toString());
                    String[] filePathColumn = {MediaStore.Images.Media.DATA};
                    Cursor cursor = this.activity.getContentResolver().query(
                            selectedImage, filePathColumn, null, null, null);
                    cursor.moveToFirst();
                    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                    String filePath = cursor.getString(columnIndex);
                    cursor.close();
                    photo = BitmapFactory.decodeFile(filePath);
                    //For the case that is Android 5.0 and the photo is on the server
                    // and not on the device
                    if (photo == null){
                        try {
                            photo = getBitmapFromUri(data.getData());
                            Log.d("EB", "photo = getBitmapFromUri(data.getData()) = " + photo.toString());
                        } catch (IOException e) {
                            e.printStackTrace();
                            Toast.makeText(this.activity, FAILD_TO_ATTACH_PHOTO_MESSAGE,
                                    Toast.LENGTH_SHORT).show();
                        }
                    }
                    //Set the photo to the imageView
                    imageView.setImageBitmap(photo);
                   Log.d("EB", "attached image = " + ((photo != null) ? photo.toString() : "NULL"));
                }
                break;

        }
    }

我试着写在主持人Activity:

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
}

但它没有用。希望你能帮忙。 提前谢谢!

1 个答案:

答案 0 :(得分:0)

你不能这样做。 您必须在Activity中调用它,然后使用REQUEST_CODE检查结果是否为真。如果使用代码进行了清除,则必须从方法中检索数据并执行所需操作。这是原始解决方案。