關(guān)于Android Fragment對回退棧的詳細(xì)理解
測試項目
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對回退棧詳細(xì)理解的文章就介紹到這了,更多相關(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應(yīng)用UI布局實例
- Android的Fragment的生命周期各狀態(tài)和回調(diào)函數(shù)使用
- Android App中使用ViewPager+Fragment實現(xiàn)滑動切換效果
- Android App中ViewPager與Fragment結(jié)合的一些問題解決
- Android程序開發(fā)之Fragment實現(xiàn)底部導(dǎo)航欄實例代碼
- 詳解Android應(yīng)用中DialogFragment的基本用法
相關(guān)文章
Flutter 用自定義轉(zhuǎn)場動畫實現(xiàn)頁面切換
本篇介紹了 fluro 導(dǎo)航到其他頁面的自定義轉(zhuǎn)場動畫實現(xiàn),F(xiàn)lutter本身提供了不少預(yù)定義的轉(zhuǎn)場動畫,可以通過 transitionBuilder 參數(shù)設(shè)計多種多樣的轉(zhuǎn)場動畫,也可以通過自定義的 AnimatedWidget實現(xiàn)個性化的轉(zhuǎn)場動畫效果。2021-06-06
AndroidStudio 使用過程中出現(xiàn)的異常(Gradle sync failed)處理辦法
本文主要介紹AndroidStudio 使用過程中出現(xiàn)的異常的解決辦法,這里幫大家舉例說明,如何處理出現(xiàn)這種問題,有需要的小伙伴可以參考下2016-09-09
Android使用Gallery實現(xiàn)照片拖動的特效
這篇文章主要介紹了Android如何使用Gallery實現(xiàn)照片拖動的特效,幫助大家更好的理解和利用Android進(jìn)行開發(fā),感興趣的朋友可以了解下2021-01-01
詳解Android使用Handler造成內(nèi)存泄露的分析及解決方法
這篇文章主要介紹了詳解Android使用Handler造成內(nèi)存泄露的分析及解決方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12
AndroidImageSlider實現(xiàn)炫酷輪播廣告效果
這篇文章主要為大家詳細(xì)介紹了AndroidImageSlider實現(xiàn)炫酷輪播廣告效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-08-08

