Android fragment popBackStack 和替换不删除 View

标签 android android-fragments

我正在尝试学习使用 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 的引用 var;这样我就可以使用父 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/

相关文章:

android - 如何将具有不同类的 fragment 添加到我的 MainActivity

java - 如何在 Java(Android) 上迭代我的 RadioButton 以查找字符串

java - 防止发生错误时强行关闭

android - RecyclerView 添加按钮点击事件

android - 如何从fragment中隐藏Recyclerview的行项目

java - fragment 不会显示多个项目

android - 错误 :Execution failed for task ':app:zipalignDebug' . > 当我在 Android Studio 上运行我的应用程序时

java - 使用自动生成的 ID 更新 firebase 中的文档

android - 适用于 API 17 之前版本的嵌套 fragment

android - ViewPager 作为循环队列/包装