【问题标题】:Android Nested FragmentsAndroid 嵌套片段
【发布时间】:2013-11-05 13:09:34
【问题描述】:

我正在尝试实现nested fragments,但我遇到了问题。

当我在一个ChildFragmentManager 和一个fragment 中添加两个不同的fragments 和两个不同的tags(“tag1”、“tag2”)时,一切似乎都正常。

但是当我在这些tags 上调用getChildFragmentManager().findFragmentByTag 时,只返回第一个fragment。我在第二个收到null

要添加fragments 我使用:

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:

我想做的是,我有ViewPagerfragments 之一,我有custom view,它负责拍照并在ImageView 中显示。所以nested fragment 正在调用camera intent,而在onActivityResult 中它正在更新ImageView。如您所知,Nested Fragments 中有一个bug,我必须从Parent Fragment 手动调用nested fragmentonActivityResult。因此,在 Parent 的 onActivityResult 中,我正在尝试获取我需要的 nested fragment 并调用它的 onActivityResult

编辑 3:

如我所说,我有Custom View,负责拍照和炫耀。我在父 Fragment Layout 中有 3 个 Custom Views。当用户点击其中任何一个时,它应该拍照并预览。如果我只将 1 个 custom view 添加到父 fragment 它可以工作,但是当我使用其中 3 个时,click event 对所有这些都有效,这意味着相机 fragment 已连接但我无法调用onActivityResult 在其他两个上,因为我无法得到fragment 那个startedActivityForResult,它是null。所以在我看来,问题应该在于将nested fragments 添加到transaction 但我找不到。

【问题讨论】:

  • 你能把代码贴在你调用 findFragmentByTag 的地方吗?
  • 您调用了 transaction.add() 两次,同时添加了两次完全相同的片段。那么为什么不创建 2 个单独的片段呢?否则,您的第二个选择是使用 transaction.replace() 交换片段。

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


【解决方案1】:

我不能确定,因为源代码不是 100% 完整的,但我认为有几件事混淆了。

例如,您对片段和事务重复使用相同的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();

尚未尝试过,因此您可能需要对其进行一些修改才能编译,但您明白了。让我知道这是否有效。

【讨论】:

  • 我想你误会了。我会在问题中添加一些内容。
猜你喜欢
  • 1970-01-01
  • 2016-11-26
  • 2013-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多