片段android中未调用onActivityResult [重复]
Posted
技术标签:
【中文标题】片段android中未调用onActivityResult [重复]【英文标题】:onActivityResult not called in fragment android [duplicate] 【发布时间】:2013-12-02 11:48:12 【问题描述】:这是我从画廊拍照的代码。
public class FragmentLayout1 extends Fragment implements OnClickListener
View root;
Context c;
Button add_image;
DialogAddImage image;
RelativeLayout layout_image;
String path;
RunAnimations anima;
public void setContext(Context c)
this.c = c;
Constants con = new Constants(c);
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
anima = new RunAnimations();
image = new DialogAddImage((Activity) c);
Bundle bun = new Bundle();
path = bun.getString("path");
root = inflater.inflate(R.layout.layout_1, container, false);
add_image = (Button)root.findViewById(R.id.button2);
add_image.setOnClickListener(this);
layout_image = (RelativeLayout)root.findViewById(R.id.layout_image);
if(!TextUtils.isEmpty(path))
Log.e("path", path);
Drawable d = Drawable.createFromPath(path);
layout_image.setBackground(d);
return root;
@Override
public void onClick(View v)
// TODO Auto-generated method stub
anima.loadAnimationView(c, R.anim.alpha_button, v);
if(v == add_image)
image.showDialog();
//============= fungsi untuk menerima hasil pilihan user dalam kotak dialog ambil gambar=============
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
Log.e("result", "Result");
new ImageResult((Activity) c).resultOfImage(requestCode, resultCode, data, image.getUri(), false);
在点击方法中,我有按钮 add_image。 add_image 将显示一个对话框供用户从相机或画廊拍照 这是我的对话代码
public class DialogAddImage
private Activity c;
private Uri mImageCaptureUri;
private Dialog dialog;
AnimasiActivity aa;
Button camera, galeri;
public DialogAddImage(Activity c)
this.c = c;
aa = new AnimasiActivity(c);
setDialog();
//untuk mendapatkan uri yang menyimpan informasi path file image
public Uri getUri()
return mImageCaptureUri;
@SuppressWarnings("deprecation")
private void setDialog()
dialog = new Dialog(c);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.dialog_add_image);
dialog.getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));
camera = (Button) dialog.findViewById(R.id.button1);
galeri = (Button)dialog.findViewById(R.id.button2);
//kalo user pilih dari kamera
camera.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
hideDialog();
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
String file_name = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date());
File file = new File(Constants.path_image +file_name + ".jpg");
mImageCaptureUri = Uri.fromFile(file);
intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageCaptureUri);
try
intent.putExtra("return-data", true);
intent.putExtra("mImageCaptureUri", mImageCaptureUri);
aa.startForwardForResult(intent, Constants.PICK_FROM_CAMERA);
catch (Exception e)
e.printStackTrace();
);
//kalo user pilih dari galery
galeri.setOnClickListener(new OnClickListener()
@Override
public void onClick(View arg0)
hideDialog();
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
aa.startForwardForResult(intent, Constants.PICK_FROM_FILE);
);
public void showDialog()
dialog.show();
public void hideDialog()
dialog.dismiss();
但是当我从图库中选择图片时,该图片没有显示在我的片段中。而且 onActivityResult 方法从未调用过,但是为什么???任何解决方案,请
【问题讨论】:
查看this 重复问题Check this 【参考方案1】:确保从片段中调用 startActivityForResult() 而不是 getActivity().startActivityForResult()。参考onActivityResult is not being called in Fragment
【讨论】:
【参考方案2】:在父 Activity 中覆盖 onActivityResult
,即所有片段的父
【讨论】:
有同样的问题***.com/questions/34059269/…【参考方案3】:如果您在Activity
中覆盖onActivityResult
,请确保您也在那里调用super.onActivityResult
,以便将结果传播到您的片段。
【讨论】:
你能告诉***.com/questions/34059269/… 拯救了我的一天!有很多代码 sn-ps 覆盖 onActivityResult 而不调用 super。我以为它什么也没做......【参考方案4】:此外,如果您从片段中调用startActivityForResult()
,那么将在您的片段中调用onActivityResult()
。如果你从你的活动中调用startActivityForResult()
,那么onActivityResult()
将在你的活动中被调用。基本上,您调用startActivityForResult()
的位置就是调用onActivityResult()
的位置。
另外,在 android 中创建对话框的首选方式是扩展 DialogFragment 类。
【讨论】:
【参考方案5】:问题非常敏感,我对此进行的观察(修复)有点棘手,如下所示,
当你从活动 A 调用活动 B 时,源活动(A)实例应该在堆栈(内存)中以调用“onActivityResult”回调。
问题解释如下,
观察:从Material design回来和NavUtils.navigateUpFromSameTask——navigateUpFromSameTask的描述如下 "相当于调用navigateUpTo(sourceActivity, getParentActivityIntent(sourceActivity))的便捷方法。sourceActivity会被这个调用完成"
记住 sourceActivity (A) 在使用此方法时会从堆栈(内存)中删除。
当没有 sourceActivity(A) 时,没有剩余的基实例(A) 可以调用“onActivityResult”回调。
【讨论】:
【参考方案6】:您可以简单地在片段 baseActivity.startActivityForResult
上覆盖 BaseActivity onActivityResult
。
在BaseActivity上添加接口
private OnBaseActivityResult baseActivityResult;
On Fragment 实现 OnBaseActivityResult
Check my answer here
【讨论】:
【参考方案7】:我有一个自定义 DialogFragment,我遇到了同样的问题。无需从父母的方法中触发它。您必须调用 startActivityForResult() 而不是 getActivity().startActivityForResult() 就像上面回答的@umesh 一样。
【讨论】:
【参考方案8】:当您从片段调用startActivityForResult
时,结果将发送回您的活动的onActivityResult
。而是在活动的onActivityResult
中使用super.onactivityResult
,结果将被发送回片段的onActivityResult
。你可以在这里写你的代码。不要在片段的onActivityResult
中使用getActivity.onactivityResult
,因为它会引用活动的onActivityResult
。
【讨论】:
以上是关于片段android中未调用onActivityResult [重复]的主要内容,如果未能解决你的问题,请参考以下文章