gpt4 book ai didi

Android fragment popBackStack并替换不删除 View

转载 作者:太空狗 更新时间:2023-10-29 16:38:36 24 4
gpt4 key购买 nike

我正在努力学习使用 fragment 。

假设我有一个 Activity ,有 2 个 fragment - FragmentAFragmentB

在我的 Activity 中,我添加了 fragment ,我认为当我按下后退按钮时能够删除 fragment View :

    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 View 中,我有 2 个按钮。一种用于返回,一种用于用 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);
}

问题:当我转到 fragmentB 或按下后退按钮时,为什么 FragmentA 的两个按钮仍然显示在屏幕上?我想要后退按钮删除 FragmentA。 fragment 是否被删除/分离但 View 没有?

(我对所有内容都使用 FrameLayout,我可以看到 FragmentA View 仍然存在)

编辑 =============================

好的,我意识到有一个 onDestroyView() 方法,但我不确定它是否是删除 FragmentA View 的正确方法?

它需要我保留父 View 的一个实例,以及我的 fragment 布局 View 的引用变量;这样我就可以使用父 View 删除此处的所有 View

最佳答案

您不需要显式地执行 container.addView(view);。只需返回膨胀的 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;
}

关于Android fragment popBackStack并替换不删除 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22106374/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com