即時通訊2

項目雜談–之即時通訊(底部Fragment)

最近做一個即時通訊的項目,如果你對這個項目名稱不是很瞭解,那麼打開你的手機qq,底部導航欄,有消息,聯繫人,動態這個三個按鈕,那麼依次的對應着三個fragment,當點擊了某一個按鈕,那麼去加載一個fragment,首先我們可以聲明三個fragment,依次叫做ContactFragment ,ConversationFragment, PluginFragment.

那麼問題來了,如何去創建三個fragment,我們都知道fragment是放在一個容器中,並且是由我們的fragmentManager進行管理的,添加fragment的方式有兩種

添加fragment的方式:
(1).replace 添加:
好比就是一個坑,等着我們創建好的fragment進行來填,
這種方式,我認爲不是很好,這種方式添加會對fragment的生命週期有影響。當點擊切換fragment的時候,原先創建好的fragment會被替換,重新去創建,這樣就不是很好了,如果說我們切換到聯繫人這個fragment的時候,上一次還有數據的,下一次去點擊的時候,還需要去重新加載數據,這樣就不是很好了。

(2).add方式添加 :
這種方式,對於我們這個項目是比較不錯的選擇,怎麼說呢,當我切換到另外一個fragment的時候,可以將其他的fragment隱藏起來,當被選中的fragment,讓其顯示處理,顯示不會走Fragment的onResume 方法,隱藏不會走Fragment的onPause方法,因此不會對Fragment的生命週期有影響

2.Fragment的創建。
這個Fragment的創建直接是通過工廠類來實現的,大體思路如下:
讓三個Fragment去繼承一個基類BaseFragment,創建一個工廠FragmentFactory,在這個工廠中,我使用了單例設計,將三個Fragment全部聲明稱靜態的成員變量,這樣做的好處,就是保證了在整個應用中只有對應Fragment的實例對象,

public class FragmentFactory {
    private static ContactFragment      mContactFragment;
    private static ConversationFragment mConversationFragment;
    private static PluginFragment       mPluginFragment;


    public static BaseFragment createFragment(int position) {
        BaseFragment baseFragment = null;
        switch (position) {
            case 0:
                if (mContactFragment == null) {
                    synchronized (FragmentFactory.class) {
                        if (mContactFragment == null) {
                            baseFragment = new ContactFragment();
                        }
                    }
                }
                break;

            case 1:
                if (mConversationFragment == null) {
                    synchronized (FragmentFactory.class) {
                        if (mConversationFragment == null) {
                            baseFragment = new ConversationFragment();
                        }
                    }
                }

                break;
            case 2:
                if (mPluginFragment == null) {
                    synchronized (FragmentFactory.class) {
                        if (mPluginFragment == null) {
                            baseFragment = new PluginFragment();
                        }
                    }
                }

                break;
        }
    return baseFragment;

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