【问题标题】:startActivityForResult doesn't work in a Fragment while image upload from camera or gallery从相机或画廊上传图像时,startActivityForResult 在片段中不起作用
【发布时间】:2016-09-30 08:39:59
【问题描述】:
public class Profile extends Fragment implements Profile_frg{


imageView.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                final Dialog d = new Dialog(mainActivity);
                d.requestWindowFeature(Window.FEATURE_NO_TITLE);
                d.setContentView(R.layout.activity_custom_dialog);
                d.setCanceledOnTouchOutside(true);


                gallery = (ImageView) d.findViewById(R.id.imageView1);
                camera = (ImageView) d.findViewById(R.id.imageView2);
                cancel = (ImageView) d.findViewById(R.id.imageView3);

                cancel.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        d.dismiss();
                    }
                });


                gallery.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        try {
                            Intent gintent = new Intent();
                            gintent.setType("image/*");
                            gintent.setAction(Intent.ACTION_GET_CONTENT);
                            startActivityForResult(Intent.createChooser(
                                    gintent, "Select Picture"), PICK_IMAGE);
                        } catch (Exception e) {
                            Toast.makeText(mainActivity,
                                    e.getMessage(), Toast.LENGTH_LONG).show();
                            Log.e(e.getClass().getName(), e.getMessage(), e);
                        }

                        d.dismiss();
                    }

                });

                camera.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {

                        // define the file-name to save photo taken by Camera
                        // activity
                        String fileName = "new-photo-name.jpg";
                        // create parameters for Intent with filename
                        ContentValues values = new ContentValues();
                        values.put(MediaStore.Images.Media.TITLE, fileName);
                        values.put(MediaStore.Images.Media.DESCRIPTION,
                                "Image captured by camera");
                        // imageUri is the current activity attribute, define
                        // and save it for later usage (also in
                        // onSaveInstanceState)
                        imageUri = context.getContentResolver().insert(
                                MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                                values);
                        // create new Intent
                        Intent intent = new Intent(
                                MediaStore.ACTION_IMAGE_CAPTURE);
                        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
                        intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);

                        startActivityForResult(intent, PICK_Camera_IMAGE);

                        d.dismiss();
                    }

                });
                d.show();
            }
        });

}// Work Fine till here...



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

    }//didn't detect this method

【问题讨论】:

  • 看看this
  • 谢谢..但我已经浏览了那个链接我仍然不明白这一点......所以如果你有任何例子,请帮助我......
  • 尝试实现该答案或以下答案:)它应该可以工作

标签: android android-fragments imageview fragment gallery


【解决方案1】:

是的,片段中没有 onActivityResult() 回调。 您必须在主机活动中覆盖 activityResult 方法(在其中定义了您的片段)

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
   if(requestCode == GALLERY/CAMERA_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
       Fragment yourFragment = getSupportFragmentManager().findFragmentByTag("FRAGMENT_TAG"); // same tag while adding fragment for the first time.
       if (yourFragment != null) {
           yourFragment.onActivityResult(requestCode, resultCode, data); //calling method that should be defined in your fragment.
       }
   }
   super.onActivityResult(requestCode, resultCode, data);
}

在你的片段中这样做:

public void onActivityResult(int requestCode,int resultCode,Intent data) {
   ...
   Pull your image data from data object
   do your further process from here.
   ...
}

【讨论】:

  • 谢谢......仍然没有得到解决方案可能做错了什么......实际上在片段类中,我必须在活动结果 ryte 中编写我常用的代码?在主课上我必须写
  • @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode == GALLERY/CAMERA_REQUEST_CODE && resultCode == Activity.RESULT_OK) { Fragment yourFragment = getSupportFragmentManager().findFragmentByTag( “FRAGMENT_TAG”); // 第一次添加片段时相同的标签。 if (yourFragment != null) { yourFragment.onActivityResult(requestCode, resultCode, data); //调用应该在你的片段中定义的方法。 } } super.onActivityResult(requestCode, resultCode, data); }
  • 对。你还面临同样的问题吗?
  • 是的!我面临同样的问题:(
  • 其实我正在使用片段和视图寻呼机..!
【解决方案2】:

是的,如果您从任何片段调用 startActivityForResult 将不会直接工作。获得结果后,回调将点击 Hosting Activity 的 onActivityResult,您必须手动将其重定向到相应的片段

以下是您的 Activity 的 onActivityResult 的示例代码。请注意,这只会将结果重定向到相应的片段。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
        case 1001:
            Fragment frag = getSupportFragmentManager().findFragmentByTag("TAG"); // TAG should be same as the one you entered while adding the fragment
            if (frag != null) {
                frag .onActivityResult(requestCode, resultCode, data);
            }
            break;
    }
    super.onActivityResult(requestCode, resultCode, data);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2012-11-07
    相关资源
    最近更新 更多