将Current片段替换为Current片段中的另一个片段

时间:2017-01-27 06:03:07

标签: java android android-studio android-fragments

我有一个名为

的活动
MainActivity

我在容器BenefitFragment中添加了片段“R.id.mainContainer”。

在BenefitFragment布局中,我有另一个容器R.id.benefitContainer。我正在添加一个嵌套片段

getChildFragmentManager().beginTransaction()
                        .add(R.id.benefitContainer, new ConfirmPinFragment())
                        .setCustomAnimations(R.anim.slide_in_left, R.anim.do_nothing)
                        .addToBackStack("benefit")
                        .commit();

在我的ConfirmPinFragment经过一些处理之后,我想删除这个ConfirmPinFragment并将其替换为另一个Fragment,让我们说TestFragment,TestFragment可以用另一个片段替换自己等等。

以下是我在ConfirmPinFragment

中尝试过的内容
CorporateFragment fragment = new CorporateFragment();
                    getFragmentManager().beginTransaction()
                                .addToBackStack("benefit")
                                .hide(ConfirmPinFragment.this)
                                .add(android.R.id.content, fragment)
                                .setCustomAnimations(R.anim.slide_in_left, R.anim.do_nothing)
                        .commit();

但是我收到错误android.R.id.content not found。我想从里面替换片段并用另一个片段替换,我将如何做。

3 个答案:

答案 0 :(得分:1)

对于BenefitFragmentFragment,我认为ConfirmPinFragment将是您的父CorporateFragment

因此,将R.id.benefitContainer作为要替换片段的片段的容器传递。但是你需要先解决这个问题。为此,您需要使用getParentFragment()

尝试在ConfirmPinFragment

中写下此内容
Fragment mF = getParentFragment();
// double check
if (mF instanceof  BenefitFragment) {
     getFragmentManager().beginTransaction()
                    .add(((BenefitFragment)getParentFragment()).getView().findViewById(R.id.benefitContainer).getId()
                            , new CorporateFragment())
                    .setCustomAnimations(R.anim.slide_in_left, R.anim.do_nothing)
                    .addToBackStack("benefit")
                    .commit();
}

答案 1 :(得分:0)

根据您的要求,BenefitFragment是您的父片段,您成功添加了ConfirmPinFragment作为其子片段。现在其他片段让我们说TestFragment或CorporateFragment等是BenefitFragment的子片段,与ConfirmPinFragment相同。所以你必须像使用ConfirmPinFragment添加代码那样做。只需将添加方法替换为替换

getChildFragmentManager().beginTransaction()
                        .replace(R.id.benefitContainer, new CorporateFragment())
                        .setCustomAnimations(R.anim.slide_in_left, R.anim.do_nothing)
                        .addToBackStack("ConfirmPin")
                        .commit();

所有子片段的布局容器都是R.id.benefitContainer

答案 2 :(得分:0)

试试这段代码:

     getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, fragment, tag).addToBackStack(tag).commit();


//"content_frame" is the name of your view where the Fragment will be shown and //"fragment" is the name of your Fragment

以上代码将替换您的片段