从非活动类调用 startActivityForResult() 并在现有活动或片段中获取结果



My IntentHelper class is

public class IntentHelper {
private Activity activity;
// Camera activity request code
public static final int CAMERA_CAPTURE_IMAGE_REQUEST_CODE = 100;
//Gallery activity request code
public static final int GALLERY_OPEN_IMAGE_REQUEST_CODE = 101;
public IntentHelper(Activity activity){
this.activity = activity;
}
/**
* Launching gallery to get image
*/
public void getGalleryImage(){
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("scale", true);
intent.putExtra("outputFormat",
Bitmap.CompressFormat.JPEG.toString());
activity.startActivityForResult(Intent.createChooser(intent, "Select Image"),GALLERY_OPEN_IMAGE_REQUEST_CODE);
}
}

我将片段中的此类称为:

IntentHelper intentHelper = new IntentHelper(getActivity());
intentHelper.getGalleryImage();

我的画廊意图使用此逻辑成功打开。 但:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// following if condition is not executing
if(requestCode == IntentHelper.GALLERY_OPEN_IMAGE_REQUEST_CODE)
{
if(resultCode == RESULT_OK){
SnackbarHelper.showSnackBar("Image browsed sucessfully",getView());
Toast.makeText(getContext(), "Image browsed successfully", Toast.LENGTH_SHORT).show();
}
else if(requestCode == RESULT_CANCELED){
SnackbarHelper.showSnackBar("Image browsed cancelled",getView());
}
}
}

我不知道为什么会这样。 我的意图被完美地调用,并且使我返回到相同的活动,那么为什么这个onActivityResult((条件不起作用???

我的所有代码都是片段。但我不这么认为它会导致这个问题

编辑 - 解决方案

正如@laalto给出的答案是正确的。我必须使用片段实例启动启动ActivityForResult((。

因此,我将我的 IntentHelper 类更改为:

public class IntentHelper {
/*
* Instead of Activity use Fragment
*/
private Fragment fragment;
// Camera activity request code
public static final int CAMERA_CAPTURE_IMAGE_REQUEST_CODE = 100;
//Gallery activity request code
public static final int GALLERY_OPEN_IMAGE_REQUEST_CODE = 101;
public IntentHelper(Fragment fragment){
this.fragment = fragment;
}
/**
* Launching gallery to get image
*/
public void getGalleryImage()  {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("scale", true);
intent.putExtra("outputFormat",
Bitmap.CompressFormat.JPEG.toString());
// Use fragment for startActivityForResult() to initiate.
fragment.startActivityForResult(Intent.createChooser(intent, "Select Image"),GALLERY_OPEN_IMAGE_REQUEST_CODE);
}

}

IntentHelper 的启动方式为 :

IntentHelper intentHelper = new IntentHelper(this);
intentHelper.getGalleryImage();

更改后一切正常!!!

我的所有代码都是片段。但我不这么认为它会导致这个问题

这是问题所在。

如果调用Activity#startActivityForResult(),则会收到活动onActivityResult

如果调用Fragment#startActivityForResult(),则会在该片段中收到onActivityResult

(在后台完成此操作的方式是,FragmentActivity将片段索引编码为那些结果应该转到片段的调用的请求代码。

因此,在活动中调用startActivityForResult()并期望在片段中看到结果是行不通的。将请求移动到片段,或将响应处理移动到活动。

此外,如果不处理结果,请将其传递给super实现。

我想你可以在活动的onActivityResult中尝试一下,调用super.onActivityResult((

和碎片 在你的片段中,确保你打电话

startActivityForResult(intent,111); instead of getActivity().startActivityForResult(intent,111); inside your fragment.

你必须打电话super.onActivityResult(requestCode, resultCode, data);在包含片段的活动onActivityResult()中,然后片段本身才能接收onActivityResult()触发。只需在您的活动中输入以下内容:

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

相关内容

  • 没有找到相关文章

最新更新