我正在尝试实现嵌套 fragment
,但我遇到了问题。
当我在一个 的
,似乎一切正常。 ChildFragmentManager
中添加两个不同的 fragments
和两个不同的 tags
("tag1", "tag2") >fragment
但是当我在这些 tags
上调用 getChildFragmentManager().findFragmentByTag
时,只返回第一个 fragment
。我在第二个上得到了 null
。
要添加 fragment
,我使用:
PersonsImageFragment imf = new PersonsImageFragment(imgPreview, 1);
android.support.v4.app.FragmentTransaction transaction = frag.getChildFragmentManager().beginTransaction();
transaction.add(R.id.frame, imf, "tag1")
.addToBackStack(tagName)
.commit();
imf = new PersonsImageFragment(imgPreview, 2);
transaction.add(R.id.frame2, imf, "tag2")
.addToBackStack(tagName)
.commit();
我错过了什么吗?
编辑:
f = getChildFragmentManager().findFragmentByTag("tag1");
// f.onActivityResult(requestCode, resultCode, data);
f = getChildFragmentManager().findFragmentByTag("tag2");
// f.onActivityResult(requestCode, resultCode, data);
编辑 2:
我想做的是,我有 ViewPager
并且在其中一个 fragments
中有 custom view
,即负责拍照并将其显示在 ImageView
中。所以 nested fragment
正在调用 camera intent
并在 onActivityResult
中更新 ImageView
。如您所知,Nested Fragments
中存在一个bug
,我必须手动调用 nested fragment
的 onActivityResult
父 fragment
。所以在 Parent 的 onActivityResult
中,我试图获取我需要的 nested fragment
并调用它的 onActivityResult
。
编辑 3:
正如我所说,我有 Custom View
,它负责拍照和展示。我在父 Fragment
Layout
中有 3 个 Custom Views
。当用户点击其中任何一个时,它应该拍照并预览。如果我只添加 1 个 custom view
到父 fragment
它有效,但是当我使用其中的 3 个时,click 事件
对所有的有效它们,这意味着附加了相机 fragment
但我无法在其他两个上调用 onActivityResult
因为我无法获得 fragment
startedActivityForResult
,它是null
。所以在我看来,问题应该在于将 nested fragments
添加到 transaction
但我找不到它。
最佳答案
我真的不能确定,因为源代码不是 100% 完整的,但我认为有几件事被混淆了。
例如,您为 fragment 和事务重复使用相同的 PersonsImageFragment
。尝试这样的事情:
PersonsImageFragment frag1 = new PersonsImageFragment(imgPreview, 1);
android.support.v4.app.FragmentTransaction transaction = frag1.getChildFragmentManager().beginTransaction();
transaction.add(R.id.frame, frag1, "tag1")
.addToBackStack(tagName)
.commit();
PersonsImageFragment frag2 = new PersonsImageFragment(imgPreview, 2);
android.support.v4.app.FragmentTransaction transaction2 = frag2.getChildFragmentManager().beginTransaction();
transaction2.add(R.id.frame2, frag2, "tag2")
.addToBackStack(tagName)
.commit();
还没有尝试过,所以你可能需要稍微修改一下才能编译,但你明白了。让我知道这是否有效。
关于Android 嵌套 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19789770/