Android開發 FragmentTransaction的詳解


前言

 

FragmentTransaction的API

了解add()方法

add一共有三種重載方法,用add方法添加的Fragment都會保存在FragmentManage的棧中,源碼如下(我加了一些個人注釋):

 
    //此方法的形參只有Fragment與tag,沒有containerViewId容器View的id,所以請注意此方法添加的Fragment在調用show()方法后並不會顯示出來 //但是用此方法的添加的Fragment會保留在FragmentManage的棧中  @NonNull public FragmentTransaction add(@NonNull Fragment fragment, @Nullable String tag) { doAddOp(0, fragment, tag, OP_ADD); return this; } //此方法添加的形參只有containerViewId與fragment所以,你無法在FragmentManage使用findFragmentByTag,找到此Fragment  @NonNull public FragmentTransaction add(@IdRes int containerViewId, @NonNull Fragment fragment) { doAddOp(containerViewId, fragment, null, OP_ADD); return this; } //這是最完整的,沒什么好說的  @NonNull public FragmentTransaction add(@IdRes int containerViewId, @NonNull Fragment fragment, @Nullable String tag) { doAddOp(containerViewId, fragment, tag, OP_ADD); return this; }

 

 

了解replace()方法

  首先我們還是需要了解一下replace()的一些具體使用情況,方便進行對比理解:

  1.replace()方法每次提交Fragment的時候都會清理FragmentManage的Fragment棧中其他所有的Fragment,只保留當前傳入的Fragment,正因為如此不建議replace()與add()方法混合使用

  2.replace()方法每次提交Fragment(不管是不是相同的Fragment),都會讓Fragment重新創建。

  下面就來用代碼佐證一下,上面提到的2種性質。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM