Android片段popBackStack和replace不删除视图
我正在努力学习使用碎片 假设我有一个活动,有两个片段-Android片段popBackStack和replace不删除视图,android,android-fragments,Android,Android Fragments,我正在努力学习使用碎片 假设我有一个活动,有两个片段-FragmentA和FragmentB 在我的活动中,我添加了片段,当我按下后退按钮时,我认为可以删除片段视图: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fullscreen); Fr
FragmentA
和FragmentB
在我的活动中,我添加了片段,当我按下后退按钮时,我认为可以删除片段视图:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fullscreen);
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
mFragmentA = new FragmentA();
fragmentTransaction.add(R.id.fragment_container, mFragmentA).addToBackStack("fragA").commit();
}
在我的FragmentA看来,我有两个按钮。一个应该是回去的,一个是用FragmentB替换FragmentA
下面是FragmentA的样子:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_a_layout, null);
Button backButton = (Button) view.findViewById(R.id.frag_a_back);
backButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
getFragmentManager().popBackStack("fragA", FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
});
Button nextButton = (Button) view.findViewById(R.id.frag_a_next);
nextButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FragmentTransaction ft = getFragmentManager().beginTransaction();
FragmentB fragB = new FragmentB();
ft.replace(R.id.fragment_container, fragB).commit();
}
});
container.addView(view);
return super.onCreateView(inflater, container, savedInstanceState);
}
问题:
当我转到FragmentA B或按下后退按钮时,为什么FragmentA的两个按钮仍然显示在屏幕上?我想用后退按钮删除碎片。片段是否已移除/分离,但视图未移除/分离
(我对所有内容都使用FrameLayout,我仍然可以看到片段视图)
编辑=============================
好吧,我意识到有一个onDestroyView()
方法,但我不确定这是否是删除FragmentA视图的正确方法
它需要我保留父视图的一个实例,以及片段布局视图的一个引用变量;这样,我可以使用父视图删除此处的所有视图您不需要执行
container.addView(view)代码>显式。只需返回膨胀视图。以下更改可能会有所帮助
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View view = inflater.inflate(R.layout.fragment_a_layout, null);
Button backButton = (Button) view.findViewById(R.id.frag_a_back);
backButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
getFragmentManager().popBackStack("fragA", FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
});
Button nextButton = (Button) view.findViewById(R.id.frag_a_next);
nextButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FragmentTransaction ft = getFragmentManager().beginTransaction();
FragmentB fragB = new FragmentB();
ft.replace(R.id.fragment_container, fragB).commit();
}
});
//container.addView(view);
return view;
}