當(dāng)友盟統(tǒng)計(jì)遇上Fragment

先描述問(wèn)題:筆者需要完善項(xiàng)目中的友盟統(tǒng)計(jì)功能,主要是Fragment頁(yè)面的處理四康,下面將分三種方式

建議先看完友盟官方集成統(tǒng)計(jì)分析的參考鏈接搪搏,再看本文。

http://dev.umeng.com/analytics/android-doc/integration#1

首先在講三種方式之前我將Umeng的統(tǒng)計(jì)分析代碼獨(dú)立成一個(gè)工具類:

public class UmengUtils {

    /**
     * 開(kāi)始跳轉(zhuǎn)統(tǒng)計(jì)
     */
    public static void startStatistics(Class aClass) {
        MobclickAgent.onPageStart(aClass.getName());
        Log.d("umeng", aClass.getName() + "開(kāi)始統(tǒng)計(jì)");
    }

    /**
     * 結(jié)束跳轉(zhuǎn)統(tǒng)計(jì)
     */
    public static void endStatistics(Class aClass) {
        MobclickAgent.onPageEnd(aClass.getName());
        Log.d("umeng", aClass.getName() + "結(jié)束統(tǒng)計(jì)");
    }
}

1. Fragment存在于Activity中闪金,通過(guò)hide和show的方式分別顯示和隱藏,關(guān)鍵在于監(jiān)聽(tīng)Fragment#onHiddenChanged(boolean hidden)

在筆者的項(xiàng)目中,首頁(yè)MainActivity布局是標(biāo)準(zhǔn)BottomBar點(diǎn)擊切換顯示/隱藏Fragment疯溺,存在一個(gè)FrameLayout容器论颅,底部三個(gè)按鈕點(diǎn)擊展示不同的Fragment(A,B,C)

如下為主界面布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    ...

    <FrameLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

    ...

</RelativeLayout>

如下為MainActivity文件:

public class MainActivity extends BaseActivity {

    ...
    @BindView(R.id.container)
    FrameLayout container;

    public SparseArray<Fragment> mFragmentsCache = new SparseArray<Fragment>(3);    // Fragment列表
    private int mLastCheckedId = -1;// 記錄最后點(diǎn)擊的Fragment的id
    private FragmentTransaction transaction;
    
    @Override
    protected void onResume() {
        super.onResume();
        MobclickAgent.onResume(this);
    }

    @Override
    public void onPause() {
        super.onPause();
        MobclickAgent.onPause(this);
    }

    /**
     * 主頁(yè)fragment切換
     *
     * @param fragmentId 下導(dǎo)航欄標(biāo)簽
     */
    private void switchFragment(int fragmentId) {
        if (mLastCheckedId == fragmentId)
            return;
        transaction = getSupportFragmentManager().beginTransaction();
        Fragment lastFragment = mFragmentsCache.get(mLastCheckedId);
        if (lastFragment != null) {
            transaction.hide(lastFragment);
        }
        Fragment fragment = mFragmentsCache.get(fragmentId);
        if (fragment == null) {
            switch (fragmentId) {
                case 0:
                    fragment = new AFragment();
                    break;
                case 1:
                    fragment = new BFragment();
                    break;
                case 2:
                    fragment = new CFragment();
                    break;
                default:
                    break;
            }
            mFragmentsCache.put(fragmentId, fragment);
            transaction.add(R.id.container, fragment).commit();
        } else {
            transaction.show(fragment).commit();
        }
        mLastCheckedId = fragmentId;
    }

    ...
}

MainActivity中對(duì)Fragment的處理:

  1. 采用SparseArray將Fragment對(duì)象緩存起來(lái),采用空間換時(shí)間的策略囱嫩。
  2. 切換Fragment時(shí)恃疯,若Fragment未初始化,則將通過(guò)FragmentTransaction#add()添加墨闲。
  3. 切換Fragment時(shí)今妄,若Fragment已初始化,則將通過(guò)FragmentTransaction#hide()隱藏上一個(gè)Fragment损俭,F(xiàn)ragmentTransaction#show()顯示當(dāng)前Fragment蛙奖。

接下來(lái)看看Fragment的生命周期變化情況:

  1. 初始化————————進(jìn)入MainActivity潘酗,初始化AFragment杆兵,當(dāng)前AFragment可見(jiàn)

     03-01 10:44:18.608 AFragment----onAttach
     03-01 10:44:18.608 AFragment----onCreate
     03-01 10:44:18.608 AFragment----onCreateView
     03-01 10:44:18.649 AFragment----onActivityCreated
     03-01 10:44:18.650 AFragment----onStart
     03-01 10:44:18.653 AFragment----onResume
    

    注意:這種情況下,AFragment需要在以上的生命周期回調(diào)方法中開(kāi)始友盟統(tǒng)計(jì)

  2. 初始化&切換————————從AFragment切換到BFragment仔夺,實(shí)際上是AFragment被hide()琐脏,BFragment被add(),當(dāng)前BFragment可見(jiàn)

     03-02 11:04:09.229 BFragment----onAttach
     03-02 11:04:09.230 BFragment----onCreate
     03-02 11:04:09.236 AFragment----onHiddenChanged----false
     03-02 11:04:09.239 BFragment----onCreateView
     03-02 11:04:10.147 BFragment----onActivityCreated
     03-02 11:04:10.147 BFragment----onStart
     03-02 11:04:10.147 BFragment----onResume
    

    注意:可以看到AFragment#onPaused()并沒(méi)有回調(diào)缸兔,這種情況AFragment需要調(diào)用onHiddenChanged來(lái)結(jié)束友盟統(tǒng)計(jì)日裙,BFragment初始化類似于上面的情況1

  3. 切換————————從BFragment切換回AFragment,實(shí)際上是BFragment被hide()惰蜜,AFragment被show()昂拂,當(dāng)前AFragment可見(jiàn)

     03-02 11:20:25.923 BFragmenton----HiddenChanged----false
     03-02 11:20:25.939 AFragmenton----HiddenChanged----true
    

    注意:可以看到AFragment#onResume()并沒(méi)有回調(diào),這種情況AFragment和BFragment都已經(jīng)初始化了抛猖,事務(wù)調(diào)用show()和hide()方法時(shí)只會(huì)觸發(fā)onHiddenChanged()回調(diào)格侯。這種情況只需要在onHiddenChanged()中區(qū)分可見(jiàn),分別處理上一個(gè)可見(jiàn)界面的結(jié)束統(tǒng)計(jì)以及當(dāng)前可見(jiàn)界面的友盟統(tǒng)計(jì)

  4. 跳轉(zhuǎn)————————從AFragment點(diǎn)擊按鈕跳轉(zhuǎn)到CActivity财著,當(dāng)前CActivity可見(jiàn)

     03-02 11:27:36.090 AFragment----onPause
     03-02 11:27:36.091 BFragment----onPause
     03-02 11:27:36.639 AFragment----onStop
     03-02 11:27:36.639 BFragment----onStop
    

    注意:兩個(gè)頁(yè)面的onPaused和onStop都回調(diào)了联四,雖然當(dāng)前AFragment可見(jiàn),但是BFragment同樣會(huì)觸發(fā)生命周期回調(diào)撑教。這種情況下朝墩,需要具體區(qū)分哪個(gè)頁(yè)面是可見(jiàn)的,可見(jiàn)的情況下在onPaused中結(jié)束友盟統(tǒng)計(jì)

  5. 重現(xiàn)————————從CActivity回退伟姐,當(dāng)前AFragment可見(jiàn)

     03-02 11:34:22.430 AFragment----onStart
     03-02 11:34:22.430 BFragment----onStart
     03-02 11:34:22.433 AFragment----onResume
     03-02 11:34:22.433 BFragment----onResume
    

    注意:兩個(gè)頁(yè)面的onStart和onResume都回調(diào)了收苏,鎖屏和解鎖后觸發(fā)的Fragment生命周期回調(diào)與4-5一致,故歸結(jié)為同一情況愤兵。這種情況下鹿霸,區(qū)分可見(jiàn),可見(jiàn)的情況下在onResume中開(kāi)始友盟統(tǒng)計(jì)

以上總共分為四種情況:

處理的時(shí)候需要處理好4種情況恐似,并且防止統(tǒng)計(jì)交錯(cuò)杜跷。

如下是代碼,BaseHomeFragment繼承于筆者項(xiàng)目中的BaseFragment,應(yīng)用場(chǎng)景類似的Fragment可以繼承該類:

/**
 *  該基類適合于采用Hide和show分別隱藏和顯示Fragment時(shí)的友盟統(tǒng)計(jì)
 */
public abstract class BaseHomeFragment extends BaseFragment  {

    private static final String TAG = "BaseHomeFragment";

    /**
     * 首次初始化
     */
    private boolean mFirstInit = true;

    /**
     * 是否可見(jiàn)
     */
    private boolean mVisiable;

    @Override
    public void onHiddenChanged(boolean hidden) {
        super.onHiddenChanged(hidden);
        Log.d(TAG, "onHiddenChanged----" + this.toString());
        if (!hidden) {
            mVisiable = true;
            UmengUtils.startStatistics(getClass());
        } else {
            mVisiable = false;
            UmengUtils.endStatistics(getClass());
        }
    }

    @Override
    public void onResume() {
        Log.d(TAG, "onResume----" + this.toString());
        super.onResume();
        //若首次初始化,默認(rèn)可見(jiàn)并開(kāi)啟友盟統(tǒng)計(jì)
        if (mFirstInit) {
            mVisiable = true;
            mFirstInit = false;
            UmengUtils.startStatistics(getClass());
            return;
        }

        //若當(dāng)前界面可見(jiàn),調(diào)用友盟開(kāi)啟跳轉(zhuǎn)統(tǒng)計(jì)
        if (mVisiable) {
            UmengUtils.startStatistics(getClass());
        }
    }

    @Override
    public void onPause() {
        Log.d(TAG, "onPause----" + this.toString());
        super.onPause();
        //若當(dāng)前界面可見(jiàn),調(diào)用友盟結(jié)束跳轉(zhuǎn)統(tǒng)計(jì)
        if (mVisiable) {
            UmengUtils.endStatistics(getClass());
        }
    }
}

2. Fragment與Viewpager聯(lián)動(dòng)的方式,關(guān)鍵在于監(jiān)聽(tīng)Fragment#setUserVisibleHint(boolean isVisibleToUser)

在筆者的項(xiàng)目中,查詢頁(yè)QActivity布局中存在一個(gè)Viewpager為容器配合四個(gè)Fragment(ABCD)使用葛闷,下面就不貼布局了憋槐,QActivity中適配器之類的代碼也不貼了,大同小異淑趾。

接下來(lái)看看Fragment的生命周期變化情況:

  1. 初始化————————進(jìn)入QActivity阳仔,初始化Viewpager,當(dāng)前AFragment可見(jiàn)

     03-02 13:50:53.913 AFragment----setUserVisibleHint----false
     03-02 13:50:53.913 BFragment----setUserVisibleHint----false
     03-02 13:50:53.913 AFragment----setUserVisibleHint----true
    
     03-02 13:50:53.918 AFragment----onAttach
     03-02 13:50:53.918 AFragment----onCreate
    
     03-02 13:50:53.918 BFragment----onAttach
     03-02 13:50:53.918 BFragment----onCreate
    
     03-02 13:50:53.918 AFragment----onCreateView
     03-02 13:50:53.942 AFragment----onActivityCreated
     03-02 13:50:53.943 AFragment----onStart
     03-02 13:50:53.943 AFragment----onResume
    
     03-02 13:50:53.943 BFragment----onCreateView
     03-02 13:50:53.954 BFragment----onActivityCreated
     03-02 13:50:53.954 BFragment----onStart
     03-02 13:50:53.954 BFragment----onResume
    

    注意:因?yàn)閂iewpager預(yù)加載機(jī)制扣泊,BFragment也會(huì)進(jìn)行初始化近范,注意看setUserVisibleHint()回調(diào)的次數(shù)和結(jié)果,AFragment#setUserVisibleHint()回調(diào)兩次延蟹,一次為false一次為true评矩,BFragment#setUserVisibleHint()則回調(diào)一次。AFragment需要在以上的生命周期中開(kāi)始友盟統(tǒng)計(jì)阱飘,BFragment則不需要處理斥杜。

  2. 初始化&切換————————從AFragment切換到BFragment,當(dāng)前BFragment可見(jiàn)

     03-02 14:29:48.770 CFragment----setUserVisibleHint----false
     03-02 14:29:48.772 AFragment----setUserVisibleHint----false
     03-02 14:29:48.772 BFragment----setUserVisibleHint----true
    
     03-02 14:29:48.802 CFragment----onAttach
     03-02 14:29:48.802 CFragment----onCreate
     03-02 14:29:48.804 CFragment----onCreateView
     03-02 14:29:48.854 CFragment----onActivityCreated
     03-02 14:29:48.854 CFragment----onStart
     03-02 14:29:48.854 CFragment----onResume
    

    注意:AFragment#onPaused()沒(méi)有調(diào)用沥匈,AFragment需要在setUserVisibleHint()中結(jié)束友盟統(tǒng)計(jì)蔗喂,BFragment類似情況1

  3. 切換————————從BFragment切換到AFragment,當(dāng)前AFragment可見(jiàn)

     03-02 14:52:43.825 BFragment----setUserVisibleHint----false
     03-02 14:52:43.826 AFragment----setUserVisibleHint----true
    

    注意:可以看到AFragment#onResume()并沒(méi)有回調(diào)高帖,這種情況AFragment和BFragment都已經(jīng)初始化了缰儿,Viewpager切換item,F(xiàn)ragment僅回調(diào)setUserVisibleHint()散址,這種情況只需要在setUserVisibleHint()中區(qū)分可見(jiàn)乖阵,分別處理上一個(gè)可見(jiàn)界面的結(jié)束統(tǒng)計(jì)以及當(dāng)前可見(jiàn)界面的友盟統(tǒng)計(jì)

  4. 跳轉(zhuǎn)————————從AFragment跳轉(zhuǎn)到DActivity,當(dāng)前DActivity可見(jiàn)

     03-02 15:08:11.411 AFragment----onPause
     03-02 15:08:11.413 BFragment----onPause
     03-02 15:08:11.414 CFragment----onPause
    
     03-02 15:08:12.259 AFragment----onStop
     03-02 15:08:12.259 BFragment----onStop
     03-02 15:08:12.259 CFragment----onStop
    

    注意:三個(gè)頁(yè)面的onPaused和onStop都回調(diào)了爪飘,雖然當(dāng)前AFragment可見(jiàn)义起,但是BFragment和CFragment同樣會(huì)觸發(fā)生命周期回調(diào)。這種情況下师崎,需要具體區(qū)分哪個(gè)頁(yè)面是可見(jiàn)的默终,可見(jiàn)的情況下在onPaused中結(jié)束友盟統(tǒng)計(jì)

  5. 重現(xiàn)————————從DActivity回退,當(dāng)前AFragment可見(jiàn)

     03-02 15:08:51.834 AFragment----onStart
     03-02 15:08:51.834 BFragment----onStart
     03-02 15:08:51.835 CFragment----onStart
    
     03-02 15:08:51.838 AFragment----onResume
     03-02 15:08:51.840 BFragment----onResume
     03-02 15:08:51.840 CFragment----onResume
    

    注意:三個(gè)頁(yè)面的onStart和onResume都回調(diào)了犁罩,鎖屏和解鎖后觸發(fā)的Fragment生命周期回調(diào)與4-5一致齐蔽,故歸結(jié)為同一情況。這種情況下床估,區(qū)分可見(jiàn)含滴,可見(jiàn)的情況下在onResume中開(kāi)始友盟統(tǒng)計(jì)

如下是代碼,BaseVPFragment繼承于筆者項(xiàng)目中的BaseFragment丐巫,應(yīng)用場(chǎng)景類似的Fragment可以繼承該類:

/**
 * 該基類適用于填充在Viewpager中的Fragment,用于友盟統(tǒng)計(jì)
 */
public abstract class BaseVPFragment extends BaseFragment {

    private static final String TAG = "BaseVPFragment";

    /**
     * 是否可見(jiàn)
     */
    private boolean mVisiable;

    /**
     * 是否已經(jīng)開(kāi)始統(tǒng)計(jì)
     */
    private boolean hasStarted;

    @Override
    public void onResume() {
        Log.d(TAG, this.toString() +  "----onResume");
        super.onResume();
        //若當(dāng)前界面可見(jiàn),調(diào)用友盟開(kāi)啟跳轉(zhuǎn)統(tǒng)計(jì)
        if (mVisiable && !hasStarted) {
            UmengUtils.startStatistics(getClass());
        }
    }

    @Override
    public void onPause() {
        Log.d(TAG, this.toString() +  "----onPause");
        super.onPause();
        //若當(dāng)前界面可見(jiàn),調(diào)用友盟結(jié)束跳轉(zhuǎn)統(tǒng)計(jì)
        if (mVisiable) {
            hasStarted = false;
            UmengUtils.endStatistics(getClass());
        }
    }

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        Log.d(TAG, this.toString() +  "----setUserVisibleHint----" + isVisibleToUser);
        mVisiable = isVisibleToUser;
        if (isVisibleToUser) {
            hasStarted = true;
            UmengUtils.startStatistics(getClass());
        } else {
            if (hasStarted) {
                hasStarted = false;
                UmengUtils.endStatistics(getClass());
            }
        }
    }
}

3. Fragment存在與Activity中谈况,通過(guò)replace的方式

這種最簡(jiǎn)單了勺美,只需要按照友盟統(tǒng)計(jì)官方的文檔,在onResume()中開(kāi)始統(tǒng)計(jì)碑韵,在onPaased()中結(jié)束回調(diào)即可赡茸。

總結(jié)

本篇針對(duì)友盟統(tǒng)計(jì),使用Flag和監(jiān)聽(tīng)獲取到當(dāng)前頁(yè)面可見(jiàn)Fragment祝闻,同樣適用于Fragment的懶加載占卧。

如有錯(cuò)誤請(qǐng)留言,必修改联喘。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末华蜒,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子豁遭,更是在濱河造成了極大的恐慌叭喜,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件堤框,死亡現(xiàn)場(chǎng)離奇詭異域滥,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蜈抓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)昂儒,“玉大人沟使,你說(shuō)我怎么就攤上這事≡ò希” “怎么了腊嗡?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)拾酝。 經(jīng)常有香客問(wèn)我燕少,道長(zhǎng),這世上最難降的妖魔是什么蒿囤? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任客们,我火速辦了婚禮,結(jié)果婚禮上材诽,老公的妹妹穿的比我還像新娘底挫。我一直安慰自己,他們只是感情好脸侥,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布建邓。 她就那樣靜靜地躺著,像睡著了一般睁枕。 火紅的嫁衣襯著肌膚如雪官边。 梳的紋絲不亂的頭發(fā)上沸手,一...
    開(kāi)封第一講書(shū)人閱讀 49,816評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音注簿,去河邊找鬼罐氨。 笑死,一個(gè)胖子當(dāng)著我的面吹牛滩援,可吹牛的內(nèi)容都是我干的栅隐。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼玩徊,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼租悄!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起恩袱,我...
    開(kāi)封第一講書(shū)人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤泣棋,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后畔塔,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體潭辈,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年澈吨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了把敢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡谅辣,死狀恐怖修赞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情桑阶,我是刑警寧澤柏副,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站蚣录,受9級(jí)特大地震影響割择,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜萎河,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一荔泳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧公壤,春花似錦换可、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至确憨,卻和暖如春译荞,著一層夾襖步出監(jiān)牢的瞬間瓤的,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工吞歼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留圈膏,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓篙骡,卻偏偏與公主長(zhǎng)得像稽坤,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子糯俗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,773評(píng)論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)尿褪、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,065評(píng)論 4 62
  • 寄語(yǔ)秋風(fēng)言何事 落葉紛紛念離愁 悠悠笛管聲聲慢 脈脈呢喃句句羞
    星塵夢(mèng)羽閱讀 186評(píng)論 3 7
  • 1得湘、 那時(shí)候杖玲,我還是天宮里叱咤風(fēng)云又豐姿神勇的天蓬元帥。每日里胄甲鮮明淘正,享受尊敬和愛(ài)戴摆马。 我最喜歡二郎神,仙界戰(zhàn)神...
    遇見(jiàn)而已閱讀 1,422評(píng)論 46 49
  • 小時(shí)候,盼著過(guò)年伞剑,一到冬天斑唬,就數(shù)著日子,最討厭期末考黎泣,最喜歡紅蘿卜,因?yàn)楦柚{如此:"紅蘿卜缤谎,咪咪甜抒倚,看著...
    昱君文化心理閱讀 729評(píng)論 35 57