Android 嵌套片段 -- 如何只为一个子片段调用 onActivityResult()
Android nested fragments -- how to call onActivityResult() for just one child fragment
我有一个父片段,其中有三个嵌套的子片段。
我想在我的子片段上调用 onActivityResult()。
我知道嵌套片段不会调用 onActivityResult(),因此我们需要从父片段中显式调用它。
所以在我的父片段中我覆盖了 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);
}
}
}
但问题是,即使我只处理一个子片段,也会为所有三个嵌套片段调用 onActivityResult()。
从我正在启动系统的每个子片段 activity(联系人选择器)以及我无法设置和意图额外的地方,它 returns null(系统活动不会发回额外的内容他们被称为)。那么有没有一种方法可以识别特定的子片段,并且只是 运行 嵌套片段的 onActivityResult() ,我为此点击了按钮。以下是我的嵌套片段中的代码。
@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);
}
});
}
您可以为 startActivityForResult
中的每个片段提供不同的 requestCode
并检查相同的 requestCode
并处理它。
碎片无论如何都是活跃的。
在这种情况下,您可以将嵌套的片段 ID 存储在您的 onActivityCreated() 方法中:
FRAGMENT_ID=((RelativeLayout)view.getParent()).getId(); // cast it to your parent view
然后你可以在嵌套的 fragment.Something 的 onActivityResult 中检查相同的内容
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if ((requestCode == REQUEST_ID) &&
(resultCode == RESULT_OK) &&
(getId() == FRAGMENT_ID)) {
// your logic here
}
}
可以有更好的方法,但这肯定会奏效。希望这有帮助。
我有一个父片段,其中有三个嵌套的子片段。 我想在我的子片段上调用 onActivityResult()。
我知道嵌套片段不会调用 onActivityResult(),因此我们需要从父片段中显式调用它。
所以在我的父片段中我覆盖了 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);
}
}
}
但问题是,即使我只处理一个子片段,也会为所有三个嵌套片段调用 onActivityResult()。
从我正在启动系统的每个子片段 activity(联系人选择器)以及我无法设置和意图额外的地方,它 returns null(系统活动不会发回额外的内容他们被称为)。那么有没有一种方法可以识别特定的子片段,并且只是 运行 嵌套片段的 onActivityResult() ,我为此点击了按钮。以下是我的嵌套片段中的代码。
@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);
}
});
}
您可以为 startActivityForResult
中的每个片段提供不同的 requestCode
并检查相同的 requestCode
并处理它。
碎片无论如何都是活跃的。 在这种情况下,您可以将嵌套的片段 ID 存储在您的 onActivityCreated() 方法中:
FRAGMENT_ID=((RelativeLayout)view.getParent()).getId(); // cast it to your parent view
然后你可以在嵌套的 fragment.Something 的 onActivityResult 中检查相同的内容
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if ((requestCode == REQUEST_ID) &&
(resultCode == RESULT_OK) &&
(getId() == FRAGMENT_ID)) {
// your logic here
}
}
可以有更好的方法,但这肯定会奏效。希望这有帮助。