關於近期完成的實習項目的總結

三週半的時間,做完了第一份實習工作的第一個項目,雖然沒有用到太複雜的知識,但是從基礎角度長進不少,現在項目收尾,分幾篇博客來總結一下在這裏面學到的知識。

本文從整體來說。


學習了fragment,這個項目就基本全都是用fragment來做的。

“儘量少用new操作”–在一些可以重複利用的fragment上,採用類似單例模式的“私有實例,私有構造函數,public的get實例函數”,若不爲null則直接返回該對象,null則new。

//私有實例
    private static LoginSecondStep_Fragment loginSecondStep_fragment;

    /**
     * 私有構造函數
     *
     * @param phone
     * @param AorB
     */
    private LoginSecondStep_Fragment(String phone, boolean AorB) {
        this.phone = phone;
        this.AorB = AorB;
        //只要執行new操作,就將原值更改
        isNew = true;
    }

    /**
     * 對外接口,返回實例
     *
     * @param phone
     * @param AorB
     * @param ifSendPhone
     * @return
     */
    public static LoginSecondStep_Fragment getMe(String phone, boolean AorB, boolean ifSendPhone) {

        /**
         * 只要需要上傳手機號,就必須new
         * 不上傳手機號,但是null,就new
         * 不上傳,也不爲空,直接返回
         */
        if ((ifSendPhone) || (!ifSendPhone && loginSecondStep_fragment == null)) {
            Log.i("second", "new");
            loginSecondStep_fragment = new LoginSecondStep_Fragment(phone, AorB);
        }
        return loginSecondStep_fragment;
    }

其次,fragment的切換

因爲在同一個Activity上託管着很多fragment,我第一次做的切換,使用hide & show來做的,結果導致後面重用的時候,出現了bug,一個頁面的倒計時,出現了計時混亂。
後來改用replace。
用replace的話,如果調用方不採用addToBackStack(null) 調用方則直接逐步執行生命週期函數,進入onDetach
採用addToBackStack(null)後,調用方不執行onDestory onDetach。(大量博客顯示採用addToBackStack(null)並不是放進棧裏,而是重新建立了一個新的實例區域,暫時不用,我還沒仔細看)。

一些保存操作,上傳數據操作,儘量放在生命週期函數裏進行。
eg.

@Override
    public void onPause() {
        super.onPause();
        //對上一頁的姓名進行操作
        if (getTargetFragment() == null) {
            return;
        } else {
            Intent i = new Intent();
            i.putExtra(Setting_Userinfo_Fragment.EXTRA, et.getText().toString().trim());
            getTargetFragment().onActivityResult(getTargetRequestCode(), Setting_Userinfo_Fragment.REQUEST_Truename, i);
        }
    }

針對具體情況,具體分析生命週期,藉助生命週期函數。


接下來仔細去寫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章