在上次 transaction & backstack 討論後今天突然被同事點醒,
popBackStack 跟 addToBackStack 概念是不一樣的,
addToBackStack 單純只是記憶 transaction ,
popBackStack 不只把 stack pop掉,並且 reverse pop 的 transaction。
長知識了今天。
2013年6月3日 星期一
2013年6月2日 星期日
Android Fragment
其中很重要的概念就是 Transaction 和 BackStack。
所謂 BackStack是紀錄一個 Transaction,並不是一個 Fragment。
所以 Transaction 的 method 裡面 BackStack其實是把整個 Transaction 紀錄下來,
AddToBackStack(name)所要放的參數 name 其實只是這個 transaction 的Tag。
並在 User 按下硬體 Back 鍵的時候,Reverse(逆執行) Transaction 之前執行過的行為。
範例:
A fragment add B fragment
按下 back 鍵之後
系統執行 remove B fragment
所以當沒有執行 AddToBackStack的時候,系統沒有記得Transaction
當 User 按下Back鍵,當然也就不會跑 remove,之前被 add 上的 Fragment也就不會跑 onPause()。
後記:
為什麼會打這篇?
因為網路上看了很多文章,發現沒人這樣寫過。
雖然用錯的概念也寫了幾個月了,但弄懂之後還是寫了這篇分享給大家。
有不懂的,有獨到見解的,歡迎留言。
其中很重要的概念就是 Transaction 和 BackStack。
所謂 BackStack是紀錄一個 Transaction,並不是一個 Fragment。
所以 Transaction 的 method 裡面 BackStack其實是把整個 Transaction 紀錄下來,
AddToBackStack(name)所要放的參數 name 其實只是這個 transaction 的Tag。
並在 User 按下硬體 Back 鍵的時候,Reverse(逆執行) Transaction 之前執行過的行為。
範例:
A fragment add B fragment
按下 back 鍵之後
系統執行 remove B fragment
所以當沒有執行 AddToBackStack的時候,系統沒有記得Transaction
當 User 按下Back鍵,當然也就不會跑 remove,之前被 add 上的 Fragment也就不會跑 onPause()。
後記:
為什麼會打這篇?
因為網路上看了很多文章,發現沒人這樣寫過。
雖然用錯的概念也寫了幾個月了,但弄懂之後還是寫了這篇分享給大家。
有不懂的,有獨到見解的,歡迎留言。
訂閱:
文章 (Atom)