Android 嵌套 fragment

标签 android android-fragments android-activity fragment android-fragmentactivity

我正在尝试实现嵌套 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 fragmentonActivityResult 父 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/

相关文章:

java - 如何动态地使这个子 Fragment 的 TextView 可见/不可见?

android - 使用 FragmentPagerAdapter 时如何将 onClick 事件从 fragment 传播到 Activity ?

切换 Activity 时 Android 应用程序崩溃

android - Phonegap 3 自定义插件不工作

android - 退出 Expo 后无法运行 React Native 应用程序

Android Gallery 的 getView() 返回不正确的位置

Android Activity 生命周期 : state order when new activity starts

android - 扩展 HelloGallery 教程。单击图像并将图像传递给另一个 Activity/页面

android - 如何启动 Activity 并显示特定 fragment

Android MVVM 设计模式