我有一个名为
的活动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
。我想从里面替换片段并用另一个片段替换,我将如何做。
答案 0 :(得分:1)
对于BenefitFragment
和Fragment
,我认为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
以上代码将替换您的片段