Android Fragment add與replace分析

測試一

準備以下的程式碼


supportFragmentManager.commit {
    setReorderingAllowed(true)
    add<TestFragment1>(
        R.id.fragment_container_view
    )
}
binding.replaceBtn.setOnClickListener {
    supportFragmentManager.commit {
        setReorderingAllowed(true)
        replace<TestFragment2>(
            R.id.fragment_container_view
        )
        addToBackStack("stack")
    }
}
binding.backBtn.setOnClickListener {
    supportFragmentManager.popBackStack()
}

測試方式

a. App啟動,只有TestFragment1建立

TestFragment1 onViewCreated

TestFragment1 onResume

b. 按下replaceBtn後

TestFragment1 onPause

TestFragment1 onStop

TestFragment2 onViewCreated

TestFragment2 onResume

c. 再按一次replaceBtn後

TestFragment2 onPause

TestFragment2 onStop

TestFragment2 onViewCreated

TestFragment2 onResume

d. 按backBtn後

TestFragment2 onPause

TestFragment2 onStop

TestFragment2 onViewCreated

TestFragment2 onDestroy 按下back才會onDestroy

TestFragment2 onResume

e. 再按一次backBtn後

TestFragment2 onPause

TestFragment2 onStop

TestFragment1 onViewCreated

TestFragment2 onDestroy 按下back才會onDestroy

TestFragment1 onResume

測試二


supportFragmentManager.commit {
    setReorderingAllowed(true)
    add<TestFragment1>(
        R.id.fragment_container_view
    )
}
binding.replaceBtn.setOnClickListener {
    supportFragmentManager.commit {
        setReorderingAllowed(true)
        replace<TestFragment2>(
            R.id.fragment_container_view
        )
    }
}
binding.backBtn.setOnClickListener {
    supportFragmentManager.popBackStack()
}

測試方式

a. App啟動,只有TestFragment1建立

TestFragment1 onViewCreated

TestFragment1 onResume

b. 按下replaceBtn後

TestFragment1 onPause

TestFragment1 onStop

TestFragment2 onViewCreated

TestFragment1 onDestroy 比測試一多了這行

TestFragment2 onResume

c. 再按一次replaceBtn後

TestFragment2 onPause

TestFragment2 onStop

TestFragment2 onViewCreated

TestFragment2 onDestroy 比測試一多了這行

TestFragment2 onResume

按下backBtn,沒反應,因為沒添加addToBackStack

測試三


supportFragmentManager.commit {
    setReorderingAllowed(true)
    add<TestFragment1>(
        R.id.fragment_container_view
    )
}
binding.replaceBtn.setOnClickListener {
    supportFragmentManager.commit {
        setReorderingAllowed(true)
        replace<TestFragment2>(
            R.id.fragment_container_view
        )
    }
}
binding.backBtn.setOnClickListener {
    supportFragmentManager.popBackStack()
}
binding.addBtn.setOnClickListener {
    supportFragmentManager.commit {
        setReorderingAllowed(true)
        add<TestFragment1>(
            R.id.fragment_container_view
        )
        addToBackStack(null)
    }
}

a. App啟動,只有TestFragment1建立

TestFragment1 onViewCreated

TestFragment1 onResume

b. 按下addBtn後

TestFragment1 onViewCreated

TestFragment1 onResume

b. 按下replaceBtn後

TestFragment1 onPause

TestFragment1 onStop

TestFragment1 onPause

TestFragment1 onStop

TestFragment2 onViewCreated

TestFragment1 onDestroy

TestFragment2 onResume

c. 按一次backBtn後

TestFragment1 onDestroy


相關文章

Android Fragment建立、更換、尋找、Back StackAndroid Fragment 自定義constructor
1. 使用XML在Activity與Fragment連接
2. 使用程式方式在Activity與Fragment連接
3. 將已新增的Fragment更換
4. 尋找已建立的Fragment
5. Fragment對應的FragmentManager
6. Back Stack使用
1. 重寫FragmentFactory
2. 建立Fragment
3. 在Activity中使用
Android Fragment show、hide、attach、detach用法Android Fragment Transitions動畫效果
1. 範例程式
2. Fragment show與hide是什麼呢?
3. Fragment attach與detach是什麼呢?
1. 範例程式
2. 功能介紹
Android Fragment shared element transitions動畫效果Android Fragment lifecycle
1. 範例程式
2. 功能介紹
1. 簡略
2. 測試搭配setMaxLifecycle的生命週期
Android Fragment通訊
1. 簡要
2. 使用View Model共享數據
3. 使用 Fragment Result API獲取結果

訂閱Codeilin的旅程,若有最新消息會通知。

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

WordPress.com.

向上 ↑

%d 位部落客按了讚: