关于Android Fragment对回退栈的详细理解
测试项目
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对回退栈详细理解的文章就介绍到这了,更多相关Android Fragment回退栈内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
- Android Fragment 基本了解(图文介绍)
- Android 管理Activity中的fragments
- Android基础之使用Fragment控制切换多个页面
- android开发教程之实现滑动关闭fragment示例
- FrameLayout和Fragment处理Android应用UI布局实例
- Android的Fragment的生命周期各状态和回调函数使用
- Android App中使用ViewPager+Fragment实现滑动切换效果
- Android App中ViewPager与Fragment结合的一些问题解决
- Android程序开发之Fragment实现底部导航栏实例代码
- 详解Android应用中DialogFragment的基本用法
相关文章
Android Studio导入Eclipse项目的两种方法
本文主要介绍了Android Studio导入Eclipse项目的两种方法。具有一定的参考价值,下面跟着小编一起来看下吧2017-01-01详解Android使用Handler造成内存泄露的分析及解决方法
这篇文章主要介绍了详解Android使用Handler造成内存泄露的分析及解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-12-12Android中Activity启动默认不显示输入法解决方法
这篇文章主要介绍了Android中Activity启动默认不显示输入法解决方法,一般是因为包含checkbox控件导致Activity启动默认不显示输入法,本文给出了正确解决方法,需要的朋友可以参考下2015-06-06Android监听手机电话状态与发送邮件通知来电号码的方法(基于PhoneStateListene实现)
这篇文章主要介绍了Android监听手机电话状态与发送邮件通知来电号码的方法,通过Android的PhoneStateListene实现该功能,需要的朋友可以参考下2016-01-01
最新评论