gpt4 book ai didi

Android 嵌套 fragment ——如何只为一个子 fragment 调用 onActivityResult()

转载 作者:行者123 更新时间:2023-11-30 02:01:26 28 4
gpt4 key购买 nike

我有一个父 fragment ,其中有三个嵌套的子 fragment 。我想在我的子 fragment 上调用 ​​onActivityResult()。

我知道对于嵌套 fragment ,不会调用 onActivityResult(),因此我们需要从父 fragment 显式调用它。

所以在我的父 fragment 中我覆盖了 onActivityResult:-

@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
List<Fragment> fragments = getChildFragmentManager().getFragments();
if (fragments != null) {
for (Fragment fragment : fragments) {
fragment.onActivityResult(requestCode, resultCode, intent);
}
}
}

但问题是,即使我只处理一个子 fragment ,也会为所有三个嵌套 fragment 调用 onActivityResult()。

从我正在启动系统 Activity (联系人选择器)的每个子 fragment 中,在我无法设置和 Intent 额外的地方,它返回 null(系统 Activity 不会发回调用它们的额外内容)。那么有没有一种方法可以识别特定的子 fragment 并只为嵌套的 fragment 运行 onActivityResult() ,我为此点击了按钮。以下是我的嵌套 fragment 中的代码。

@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
contactPickerButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent contactPickerIntent = new Intent(ACTION_GET_CONTENT);
contactPickerIntent.setType(CONTENT_ITEM_TYPE);
getParentFragment().startActivityForResult(contactPickerIntent, PICK_CONTACT_REQUEST_ID);
}
});
}

最佳答案

fragment 无论如何都是活跃的。在这种情况下,您可以将嵌套的 fragment ID 存储在您的 onActivityCreated() 方法中,如下所示:

FRAGMENT_ID=((RelativeLayout)view.getParent()).getId(); // cast it to your parent view

然后你可以在嵌套 fragment 的 onActivityResult 中检查相同的内容。像这样

 @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if ((requestCode == REQUEST_ID) &&
(resultCode == RESULT_OK) &&
(getId() == FRAGMENT_ID)) {
// your logic here
}
}

可以有更好的方法,但这肯定会奏效。希望这会有所帮助。

关于Android 嵌套 fragment ——如何只为一个子 fragment 调用 onActivityResult(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31396321/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com