美文网首页
Android Fragment对回退栈的理解

Android Fragment对回退栈的理解

作者: 蓝库知识 | 来源:发表于2020-12-02 15:25 被阅读0次

测试项目

FragmentActivity


public class FragmentActivity extends AppCompatActivity {
    private FrameLayout frameLayout;
    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fragment);
        frameLayout = findViewById(R.id.fl_content);
        button = findViewById(R.id.btn_click);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Fragment fTwo = new FragmentOne();
                FragmentManager fm = getSupportFragmentManager();
                FragmentTransaction tx = fm.beginTransaction();
                tx.replace(R.id.fl_content, fTwo, "One");
                tx.addToBackStack(null);//添加回退栈
                tx.commit();
                System.out.println("fm.getBackStackEntryCount() = " + fm.getBackStackEntryCount());
            }
        });
    }
}

FragmentOne(FragmentTwo、FragmentThree同理)

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View mView = inflater.inflate(R.layout.fragment_one, container, false);
        editText = mView.findViewById(R.id.et_input);
        button = mView.findViewById(R.id.btn_next);
        System.out.println("mView.findViewById = "+editText);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Fragment fTwo = new FragmentTwo();
                FragmentManager fm = getActivity().getSupportFragmentManager();
                FragmentTransaction tx = fm.beginTransaction();
                tx.replace(R.id.fl_content, fTwo, "TWO");
                tx.addToBackStack(null);
                tx.commit();
                System.out.println( "fm.getBackStackEntryCount() = "+ fm.getBackStackEntryCount());
            }
        });

        return mView;
    }

    @Override
    public void onStop() {
        super.onStop();
        Log.d("Tina======>", "onStop");
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        Log.d("Tina======>", "onDestroyView"+editText);
    }

    @Override
    public void onDetach() {
        super.onDetach();
        Log.d("Tina======>", "onDetach");
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d("Tina======>", "onDestroy");
    }

前提条件是添加fragmet的时候都是用的replace(先remove 后add)
操作1:
全部添加回退栈的操作
生命周期
开启的时候,打开到第三个fragment

开启.png
回退的时候
结束.png

操作2:
fragmentOne不加回退栈,其他加
生命周期
开启的时候

开启.png
回退的时候
结束.png

结论

1.replace 会销毁视图,生命周期走到了onDestroyView
2.加入回退栈,返回的时候,fragment还可以重新显示出来,否则返回的时候,就直接销毁了
3.加入回退栈后,返回时会重新走onCreateView方法,重新绑定视图,也就是说,实例对象会变
举例:recyclerview的话,返回回来后,之前setAdapter就没有了,因为对象换了
注意有一个还会是原来的值,是因为它对数据有保存,他就是edictText(要有id值)

相关文章

  • Android Fragment对回退栈的理解

    测试项目 FragmentActivity FragmentOne(FragmentTwo、FragmentThr...

  • Fragment回退栈和Activity栈不太一样

    Fragment回退栈,加入到Fragment回退栈里面的fragment出栈后,处于栈顶的fragment也不会...

  • 回退栈

    Fragment 的回退栈创建MvpFragmentManager : 监听使用

  • iOS webView 回退栈

    Android 的webView有回退栈,其实iOS的webView也有回退栈! webView的回退栈其实就是表...

  • 实习笔记17.07.20

    fragment回退栈?当Activity继承AppCompatActivity时 fragmentTransa...

  • Fragment学习

    1、Fragment回退栈管理 Activity是由任务栈管理的,遵循先进后出的原则,Fragment也可以实现类...

  • fragment回退栈

    https://blog.csdn.net/zhiyuan0932/article/details/5259303...

  • Fragment 回退栈

    一、什么是回退栈Activity切换时是通过栈的形式,不断压栈出栈,在Fragment的时候,如果你不是手动开启回...

  • Fragment 回退栈

    一、什么是回退栈 Activity切换时是通过栈的形式,不断压栈出栈.在Fragment的时候,如果你不是手动打开...

  • Android开发之Fragment回退栈

    在Android开发之Fragment动态使用一文中,说到replace方法切换Fragment,会造成Fragm...

网友评论

      本文标题:Android Fragment对回退栈的理解

      本文链接:https://www.haomeiwen.com/subject/zjtuwktx.html