我在努力学习使用碎片。
假设我有一个活动,有两个片段-FragmentAFragmentB
在我的活动中,我添加了片段,当我按下后退按钮时,我认为可以删除片段视图:

    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();
    }

在我的碎片看来,我有两个按钮。一个据说是为了回去,一个是为了用碎片B代替碎片A。
这就是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的两个按钮仍然显示在屏幕上?我要用“后退”按钮删除碎片。片段是否被移除/分离,但视图没有?
(我正在使用framelayout来处理所有事情,我仍然可以看到fragmenta视图)
编辑=============================
好吧,我意识到有一个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;
    }

10-08 15:03