为了账号安全,请及时绑定邮箱和手机立即绑定

片段中没有调用onActivityResult

片段中没有调用onActivityResult

莫回无 2019-05-28 16:29:08
片段中没有调用onActivityResult托管此片段的活动onActivityResult在相机活动返回时调用。我的片段开始一个结果的活动,其意图是发送给相机拍照。图片应用程序加载正常,拍照并返回。该onActivityResult然而,永远不会打。我设置了断点,但没有触发任何东西。一个片段可以onActivityResult吗?我想是因为它是一个提供的功能。为什么不被触发?ImageView myImage = (ImageView)inflatedView.findViewById(R.id.image);myImage.setOnClickListener(new OnClickListener() {     @Override     public void onClick(View view) {         Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);         startActivityForResult(cameraIntent, 1888);     }});@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) {     if( requestCode == 1888 ) {         Bitmap photo = (Bitmap) data.getExtras().get("data");         ((ImageView)inflatedView.findViewById(R.id.image)).setImageBitmap(photo);     }}
查看完整描述

3 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

托管活动会覆盖onActivityResult(),但它没有调用super.onActivityResult()未处理的结果代码。显然,即使片段是进行startActivityForResult()调用的片段,活动也会在处理结果时获得第一个镜头。当您考虑片段的模块化时,这是有意义的。一旦我实现super.onActivityResult()了所有未处理的结果,该片段就可以处理结果。

而且来自@siqing的回答:

要在片段中获得结果,请确保调用startActivityForResult(intent,111);而不是getActivity().startActivityForResult(intent,111);在片段内。


查看完整回答
反对 回复 2019-05-28
?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

我想你打过电话getActivity().startActivityForResult(intent,111);。你应该打电话startActivityForResult(intent,111);


查看完整回答
反对 回复 2019-05-28
?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

选项1:

如果你是startActivityForResult()从片段调用那么你应该调用startActivityForResult(),而不是getActivity().startActivityForResult(),因为它会导致片段onActivityResult()。

如果你不确定你在哪里打电话startActivityForResult()以及你将如何调用方法。

选项2:

由于Activity得到了结果onActivityResult(),因此您需要覆盖活动onActivityResult()并调用super.onActivityResult()以传播到未处理结果代码或所有数据的相应片段。

如果以上两个选项不起作用,请参考选项3,因为它肯定会起作用。

选项3:

从片段到onActivityResult函数的显式调用如下。

在父Activity类中,重写onActivityResult()方法,甚至在Fragment类中重写它,并调用以下代码。

在父类中:

@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.dualPane);
    fragment.onActivityResult(requestCode, resultCode, data);}

在子类中:

@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // In fragment class callback}


查看完整回答
反对 回复 2019-05-28
  • 3 回答
  • 0 关注
  • 742 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信