首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >片段onActivityResult

片段onActivityResult
EN

Stack Overflow用户
提问于 2013-11-18 02:05:02
回答 4查看 59.3K关注 0票数 35

我目前有一个基本活动,它托管一个片段。在片段中,我有一个启动联系人选择器的方法。

代码语言:javascript
复制
private void chooseContacts() {
    Intent pickContactIntent = new Intent(Intent.ACTION_PICK,      ContactsContract.Contacts.CONTENT_URI);
    pickContactIntent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
    startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);
}

当这个活动返回时,我应该如何捕获结果。我试过添加一个

代码语言:javascript
复制
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    //Handle Code
}

对我的基本活动和片段都没有触发,但是没有一个方法被触发。如果可能的话,我想让片段处理返回,以避免混淆活动。

请让我知道在这种情况下最佳做法是什么。

更新:

如果我改变了:

代码语言:javascript
复制
startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);

代码语言:javascript
复制
getActivity().startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);

然后它起作用了,但是其他的帖子让我觉得这是错误的。

EN

回答 4

Stack Overflow用户

发布于 2014-01-26 04:33:05

我认为您仍然应该在片段中直接使用调用startActivityForResult(),而不是使用getActivity().startActivityForResult()

我在片段中调用startActivityForResult()并在片段中实现onActivityResult,正确地调用onActivityResult()

不能在活动中调用startActivityForResult(),否则将不调用片段中的onActivityResult()

票数 55
EN

Stack Overflow用户

发布于 2016-12-01 12:55:30

在我的例子中,我是在我父母的活动中这样做的。

代码语言:javascript
复制
    @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);
    }
}
票数 5
EN

Stack Overflow用户

发布于 2013-11-18 02:31:57

片段的onActivityCreated还有另一个用途:

在创建了片段的活动并实例化此片段的视图层次结构时调用。一旦这些片段到位,就可以使用它来完成最终的初始化,例如检索视图或恢复状态。对于使用setRetainInstance(布尔值)保留实例的片段也很有用,因为这个回调会在片段与新的活动实例完全关联时告诉它。这是在onCreateView(LayoutInflater,ViewGroup,Bundle)之后和onViewStateRestored(Bundle)之后调用的。

这是从文档中提取的

主要是使用片段,您将在onCreateView中充气并返回视图,在onViewCreated中执行视图操作(如在ListView中设置ListAdapter )。并在onActivityCreated中执行初始化操作(比如显示欢迎对话框或类似的操作)。

你有好几种选择,我不太确定哪个更适合你的问题:

  • 我要做的是在活动的findFragmentById中执行一个onActivityResult,如果片段不是null,那么执行一个处理片段中联系人列表返回的方法。
  • 另一种方法是在活动的BroadCastReceiver中触发一个onActivityResult,并注册您的片段来收听该广播。但我觉得这太乱了,不适合这么简单的事情。
  • 最后,与第一个一样,如果没有带有id的片段,则可以在活动中实例化片段,保存引用,并在执行活动的onActivityResult时向其发送消息。

我希望这能对你有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20038880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档