關(guān)于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
回退的時候
結(jié)束.png
操作2:fragmentOne不加回退棧,其他加
生命周期開啟的時候
開啟.png
回退的時候
結(jié)束.png
結(jié)論
1.replace 會銷毀視圖,生命周期走到了onDestroyView
2.加入回退棧,返回的時候,fragment還可以重新顯示出來,否則返回的時候,就直接銷毀了
3.加入回退棧后,返回時會重新走onCreateView方法,重新綁定視圖,也就是說,實例對象會變
舉例:recyclerview的話,返回來后,之前setAdapter就沒有了,因為對象換了
注意有一個還會是原來的值,是因為它對數(shù)據(jù)有保存,他就是edictText(要有id值)
到此這篇關(guān)于關(guān)于Android Fragment對回退棧詳細理解的文章就介紹到這了,更多相關(guān)Android Fragment回退棧內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Android Fragment 基本了解(圖文介紹)
- Android 管理Activity中的fragments
- Android基礎(chǔ)之使用Fragment控制切換多個頁面
- android開發(fā)教程之實現(xiàn)滑動關(guān)閉fragment示例
- FrameLayout和Fragment處理Android應用UI布局實例
- Android的Fragment的生命周期各狀態(tài)和回調(diào)函數(shù)使用
- Android App中使用ViewPager+Fragment實現(xiàn)滑動切換效果
- Android App中ViewPager與Fragment結(jié)合的一些問題解決
- Android程序開發(fā)之Fragment實現(xiàn)底部導航欄實例代碼
- 詳解Android應用中DialogFragment的基本用法
相關(guān)文章
Flutter 用自定義轉(zhuǎn)場動畫實現(xiàn)頁面切換
本篇介紹了 fluro 導航到其他頁面的自定義轉(zhuǎn)場動畫實現(xiàn),F(xiàn)lutter本身提供了不少預定義的轉(zhuǎn)場動畫,可以通過 transitionBuilder 參數(shù)設(shè)計多種多樣的轉(zhuǎn)場動畫,也可以通過自定義的 AnimatedWidget實現(xiàn)個性化的轉(zhuǎn)場動畫效果。2021-06-06AndroidStudio 使用過程中出現(xiàn)的異常(Gradle sync failed)處理辦法
本文主要介紹AndroidStudio 使用過程中出現(xiàn)的異常的解決辦法,這里幫大家舉例說明,如何處理出現(xiàn)這種問題,有需要的小伙伴可以參考下2016-09-09Android使用Gallery實現(xiàn)照片拖動的特效
這篇文章主要介紹了Android如何使用Gallery實現(xiàn)照片拖動的特效,幫助大家更好的理解和利用Android進行開發(fā),感興趣的朋友可以了解下2021-01-01詳解Android使用Handler造成內(nèi)存泄露的分析及解決方法
這篇文章主要介紹了詳解Android使用Handler造成內(nèi)存泄露的分析及解決方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12AndroidImageSlider實現(xiàn)炫酷輪播廣告效果
這篇文章主要為大家詳細介紹了AndroidImageSlider實現(xiàn)炫酷輪播廣告效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-08-08