如何返回到Fragment的先前根视图

3
我有两个布局,分别是layout1layout2
最初在我的片段的onCreateView方法中,我使用了layout1,如下所示:
    @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            rootView = inflater.inflate(R.layout.layout1, container, false);

            Button button = (Button) rootView.findViewById(R.id.button);
            button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setViewLayout(R.layout.layout2);
            }
        });


            return rootView;
    }

在单击按钮之后,我将rootViewlayout1更改为layout2,它能够正常工作:

这是我如何进行更改的:

private void setViewLayout(int id){
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        rootView = inflater.inflate(id, null);
        ViewGroup viewGroup = (ViewGroup) getView();
        viewGroup.removeAllViews();
        viewGroup.addView(rootView);
    }

为了访问 layout2 的字段,我创建了一个类并在按钮的 onClick 事件中实例化它:
现在我想从 layout2 返回 layout1,我做了同样的事情并改变了视图但是字段不起作用,例如 layout1 的 onClick 按钮现在没有响应。
提示:我不想再启动片段,我只想要我的以前的layout1而不是新的一个。
我该如何返回,以便我可以使用之前状态的 layout1
3个回答

1
这里更好的方法是为每个布局使用两个单独的片段,在点击时用第二个片段替换当前片段。
由于已从rootview中删除了上一个布局,因此您将无法恢复它。
其次,您没有保存片段状态。

0

这不是正确的做法。你需要将片段添加到后退栈中以维护状态。请查看来自Android开发者网站的为片段实现后退导航。希望能帮到你。


0

你可以尝试使用Replace Fragment。不要使用setViewLayout(R.layout.layout2)


你不能在 onClickListener 中使用 setViewLayout。你只能使用 startActivity 或 Replace Fragment。 - Thang BA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接