FragmentTransaction的replace方法

weixin_33850890發表於2016-12-03
1775338-c664a8bb3db77112.jpg

使用replace方法時,要新增的Fragment都會重新例項化。
官方文件:
replace()這個方法只是在上一個Fragment不再需要時採用的簡便方法;
正確的切換方式:
切換時hide(),add()另一個Fragment,再次切換時只需要hide()當前的,show()另一個;
示例程式碼:

public void switchContent(Fragment from, Fragment to, int position) {
        if (mContent != to) {
            mContent = to;
            FragmentTransaction transaction = fm.beginTransaction();
            // 先判斷是否被add過            
            if (!to.isAdded()) { 
                // 隱藏當前的fragment,add下一個到Activity中
                transaction.hide(from)
                        .add(R.id.content_frame, to, tags[position]).commit();             } else {
                // 隱藏當前的fragment,顯示下一個
                transaction.hide(from).show(to).commit();            }
        }
    }

相關文章