1

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

当我在一个中添加 2 个不同fragments的两个不同的tags(“tag1”,“tag2”)时ChildFragmentManagerfragment一切似乎都很好。

但是当我调用getChildFragmentManager().findFragmentByTag这些时tags,只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:

我正在尝试做的是,我有ViewPager并且在其中一个fragments我有custom view,它负责拍照并在ImageView. 所以nested fragment正在调用camera intent并在onActivityResult其中更新ImageView. 如您所知,有一个bugin ,Nested Fragments我必须onActivityResultnested fragment. Parent Fragment所以在 Parent'sonActivityResult我试图得到nested fragment我需要的并调用它的onActivityResult.

编辑 3:

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

4

1 回答 1

3

我不能确定,因为源代码不是 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();

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

于 2013-11-05T13:37:41.320 回答