国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

多個Fragment切換時不重新實例化的方法

2019-11-09 18:50:14
字體:
供稿:網(wǎng)友
在項目中需要進行Fragment的切換,一直都是用replace()方法來替換Fragment:
public void switchContent(Fragment fragment) {    if(mContent != fragment) {        mContent = fragment;        mFragmentMan.beginTransaction()            .setCustomAnimations(android.R.anim.fade_in, R.anim.slide_out)            .replace(R.id.content_frame, fragment) // 替換Fragment,實現(xiàn)切換            .commit();    }}

但是,這樣會有一個問題:每次切換的時候,F(xiàn)ragment都會重新實例化,重新加載一邊數(shù)據(jù),這樣非常消耗性能和用戶的數(shù)據(jù)流量。

就想,如何讓多個Fragment彼此切換時不重新實例化?

翻看了Android官方Doc,和一些組件的源代碼,發(fā)現(xiàn),replace()這個方法只是在上一個Fragment不再需要時采用的簡便方法。

正確的切換方式是add(),切換時hide()add()另一個Fragment;再次切換時,只需hide()當前,show()另一個。這樣就能做到多個Fragment切換不重新實例化:

onCreate里面:

        pickerFragment = new DeckPickerFragment();        fm = getFragmentManager();        baseFragment = fm.findFragmentById(R.id.fragment_main2);        ft = fm.beginTransaction();        ft.add(R.id.fragment_main2, pickerFragment);//此處需用add,不能用replace        ft.commit();        mContent = pickerFragment;

切換的方法:

   PRivate Fragment mContent = null;    /**     * 修改顯示的內(nèi)容 不會重新加載     * to 下一個fragment     * mContent 當前的fragment     */    private void switchContent(Fragment to) {        if (mContent != to) {            FragmentTransaction transaction = getFragmentManager().beginTransaction();            if (!to.isAdded()) { // 判斷是否被add過                // 隱藏當前的fragment,將 下一個fragment 添加進去                transaction.hide(mContent).add(R.id.fragment_main2, to).commit();                        } else {                // 隱藏當前的fragment,顯示下一個fragment                transaction.hide(mContent).show(to).commit();                        }            mContent = to;               }    }


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 崇左市| 来安县| 华池县| 察隅县| 云南省| 铜川市| 达拉特旗| 开江县| 安达市| 繁峙县| 肇州县| 浮梁县| 泗洪县| 汉阴县| 九台市| 兴和县| 华池县| 金堂县| 佛山市| 平陆县| 广丰县| 内丘县| 阳东县| 裕民县| 阳江市| 鄂州市| 虹口区| 巨野县| 安泽县| 房山区| 多伦县| 商洛市| 新野县| 娄底市| 襄城县| 沁源县| 常德市| 甘泉县| 尉犁县| 安徽省| 汤阴县|