片段中的 startActivityForResult 不工作
Posted
技术标签:
【中文标题】片段中的 startActivityForResult 不工作【英文标题】:startActivityForResult From Fragment Not Working 【发布时间】:2014-05-11 14:59:31 【问题描述】:我已经与这个问题斗争了几个小时,并且几乎查看了所有其他关于这个问题的帖子,但找不到我哪里出错了。如果我遗漏了一些简单的东西,请告诉我。
活动 1(承载 CreateFragment)
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
((CreateFragment) getFragmentManager().findFragmentByTag(CreateFragment.TAG)).resultReturned(requestCode, resultCode, data);
创建片段:
private void chooseContact()
Intent chooseContactInappIntent = new Intent( getActivity(), ContactPickerActivity.class );
getActivity().startActivityForResult( chooseContactInappIntent, PICK_CONTACT_REQUEST );
public void resultReturned( int requestCode, int resultCode, Intent data )
switch ( requestCode )
case PICK_CONTACT_REQUEST:
if ( resultCode == Activity.RESULT_OK )
//Do Cool Things
default:
break;
ContactPickerActivity:
@Override
public void onContactSelected( Object data)
Intent returnIntent = new Intent();
returnIntent.putExtra("data",data);
setResult(RESULT_OK,returnIntent);
finish();
Activity One 承载一个 CreateFragment,当用户单击 CreateFragment 中的按钮时,该片段调用 chooseContact() 方法,该方法启动一个新的 ActivityForResult。 ContactPickerActivity 然后向用户显示联系人列表。当用户选择一个联系人时,会调用 onContactSelected 方法创建一个新的意图来传回所选数据,然后调用完成。我认为这会调用基础活动中的 onActivityResult 或 CreateFragment,但两者都没有被调用。
有什么想法吗?
谢谢, 内森
【问题讨论】:
【参考方案1】:如果您在 MainActivity 调用 onActivityResult 覆盖方法并且您不需要在片段类内部进行更改,则在 Fragment 类中工作正常。 所以 在像这样调用 startActivityForResult 的 Fragment 中:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && (requestCode == GALLERY_REQUEST || requestCode == CAMERA_REQUEST))
// its not complicated .....
在 MainActivity 类中也必须调用 onActivityResult。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
for (Fragment fragment : getSupportFragmentManager().getFragments())
fragment.onActivityResult(requestCode, resultCode, data);
【讨论】:
以上是关于片段中的 startActivityForResult 不工作的主要内容,如果未能解决你的问题,请参考以下文章