我目前有一个基本活动,它托管一个片段。在片段中,我有一个启动联系人选择器的方法。
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);
}当这个活动返回时,我应该如何捕获结果。我试过添加一个
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//Handle Code
}对我的基本活动和片段都没有触发,但是没有一个方法被触发。如果可能的话,我想让片段处理返回,以避免混淆活动。
请让我知道在这种情况下最佳做法是什么。
更新:
如果我改变了:
startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);至
getActivity().startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);然后它起作用了,但是其他的帖子让我觉得这是错误的。
发布于 2014-01-26 04:33:05
我认为您仍然应该在片段中直接使用调用startActivityForResult(),而不是使用getActivity().startActivityForResult()。
我在片段中调用startActivityForResult()并在片段中实现onActivityResult,正确地调用onActivityResult()。
不能在活动中调用startActivityForResult(),否则将不调用片段中的onActivityResult()。
发布于 2016-12-01 12:55:30
在我的例子中,我是在我父母的活动中这样做的。
@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);
}
}发布于 2013-11-18 02:31:57
片段的onActivityCreated还有另一个用途:
在创建了片段的活动并实例化此片段的视图层次结构时调用。一旦这些片段到位,就可以使用它来完成最终的初始化,例如检索视图或恢复状态。对于使用setRetainInstance(布尔值)保留实例的片段也很有用,因为这个回调会在片段与新的活动实例完全关联时告诉它。这是在onCreateView(LayoutInflater,ViewGroup,Bundle)之后和onViewStateRestored(Bundle)之后调用的。
这是从文档中提取的
主要是使用片段,您将在onCreateView中充气并返回视图,在onViewCreated中执行视图操作(如在ListView中设置ListAdapter )。并在onActivityCreated中执行初始化操作(比如显示欢迎对话框或类似的操作)。
你有好几种选择,我不太确定哪个更适合你的问题:
findFragmentById中执行一个onActivityResult,如果片段不是null,那么执行一个处理片段中联系人列表返回的方法。BroadCastReceiver中触发一个onActivityResult,并注册您的片段来收听该广播。但我觉得这太乱了,不适合这么简单的事情。onActivityResult时向其发送消息。我希望这能对你有所帮助。
https://stackoverflow.com/questions/20038880
复制相似问题