1. 程式人生 > >工廠模式加單例管理Fragment,同時解決fragment切換資料丟失問題

工廠模式加單例管理Fragment,同時解決fragment切換資料丟失問題

package com.itjfr.jfr.fragment;



import java.util.ArrayList;
import java.util.List;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;


/**
 * 本工廠管理fragment保證所有的fragment為單例
 * 
 * @author Nullifier
 * 
 */
public class FragmentFactory {
private static Fragment settingFragment;
private static HomeFragment homeFragment;
private static GuidanceFragment guidanceFragment;
private static MarketFragment marketFragment;
private static MeFragment meFragment;
private static PersonDetailFragment personDetailFragment;
private static ScoreFragment scoreFragment;
private static ImageFragment imageFragment;
//當前fragment快取
private static Fragment cacheFragment;


public static Fragment getNowFragment() {
return cacheFragment;
}


/**
* 切換fragment工具方法 由於fragment經常切換如果使用replace方法則會造成fragment重新載入,所以只能hide/show

* @param target
*            目標切換的fragment
* @param resourceId
*            要替換的資源ID
* @param fagmentManager
*            fragment管理者
*/
public static void switchPager(Fragment target, int resourceId,
FragmentManager fagmentManager) {
// 快取cache第一次進來是空的要單獨處理
if (cacheFragment == null) {
// 第一次進來要切換的fragment作為當前fragment加入到transaction中並顯示
fagmentManager.beginTransaction().add(resourceId, target)
.show(target).commit();
// 將此fragment賦值給快取fragment,停止程式碼執行
cacheFragment = target;
return;
}
// 如果目標fragment與當前fragment一樣則直接返回不執行
if (cacheFragment == target) {
return;
}
// 如果目標frragment沒有新增進來則新增進transaction中
if (!target.isAdded()) {
fagmentManager.beginTransaction().add(resourceId, target).commit();
}
// 隱藏當前的fragmeny顯示目標的fragment
fagmentManager.beginTransaction().hide(cacheFragment).show(target)
.commit();
//將目標fragment複製給快取標記
cacheFragment = target;
}


/**
* 獲取fragment

* @param fragment型別
*            FragmentType列舉
* @return fragment
*/
public static Fragment getFragment(FragmentType type) {
switch (type) {
case GUIDANCE:
if (guidanceFragment == null) {
guidanceFragment = new GuidanceFragment();
}
return guidanceFragment;


case HOME:
if (homeFragment == null) {
homeFragment = new HomeFragment();
}
return homeFragment;


case MARKET:
if (marketFragment == null) {
marketFragment = new MarketFragment();
}
return marketFragment;


case ME:
if (meFragment == null) {
meFragment = new MeFragment();
}
return meFragment;


case PERSONDETAIL:
if (personDetailFragment == null) {
personDetailFragment = new PersonDetailFragment();
}
return personDetailFragment;


case SCORE:
if (scoreFragment == null) {
scoreFragment = new ScoreFragment();
}
return scoreFragment;


case SETTING:
if (settingFragment == null) {
settingFragment = new SettingFragment();
}
return settingFragment;
case IMAGE:
if (imageFragment == null) {
imageFragment = new ImageFragment();
}
return imageFragment;


default:
break;
}


return null;
}


/**
* 通過網路地址集合獲取fragment集合,集合不唯一

* @param type
*            型別 一般為IMAGE
* @param urlList
*            圖片集合
* @return
*/
public static List<Fragment> getFragment(FragmentType type,
List<String> urlList) {
switch (type) {
case IMAGE:
ArrayList<Fragment> listFragment = new ArrayList<Fragment>();
if (urlList != null && urlList.size() > 0) {
for (int i = 0; i < urlList.size(); i++) {
listFragment.add(new ImageFragment().setIamgeUrl(urlList
.get(i)));
}
}
return listFragment;


default:
break;
}


return null;
}


/**
* 列舉

* @author Nullifier

*/
public static enum FragmentType {
/**
* 導航
*/
GUIDANCE,
/**
* 主頁
*/
HOME,
/**
* 市場
*/
MARKET,
/**
* 我
*/
ME,
/**
* 個人詳情
*/
PERSONDETAIL,
/**
* 積分
*/
SCORE,
/**
* 設定
*/
SETTING,
/**
* 影象
*/
IMAGE;
}


}

相關推薦

工廠模式管理Fragment同時解決fragment切換資料丟失問題

package com.itjfr.jfr.fragment; import java.util.ArrayList; import java.util.List; import android.support.v4.app.Fragment; import andr

常見的設計模式工廠模式模式

工廠模式 工廠方法模式有兩個抽象類,一個是產品抽象類,一個是工廠抽象類,若干個具體產品類和對應的具體工廠類,具體產品抽象類與產品抽象類是實現關係,與具體工廠類是依賴關係,具體工廠類與抽象工廠類是實現關係。 客戶端程式碼如下 工廠模式是定義一個用於建立物件的介面,讓子類決定將哪一個

Python的工廠模式模式

工廠模式: 解耦 定義類或方法,讓其功能越單一越好 #!/usr/bin/python #coding:utf-8 class Cake(): def __init__(self,weidao=

關於工廠模式模式的融合用法的個人見解

最近在思考spring程式碼如何降低記憶體消耗,減少物件建立的問題。後來想到使用工廠模式+單例模式來實現。此處就不貼程式碼了。直接介紹原理: 1,提供一個工廠類Factory,來提供一個統一的入口,讓APP統一從入口呼叫,獲取想要的類的物件。 2,為使用者提供的類的物件,

工廠模式

需要被工廠生產的簡單例項 程式碼塊 package com.kass; public class Dog { private String name; private int age; @Override publ

工廠模式模式、註冊樹模式

三種基本設計模式 1、工廠模式:工廠方法或者類生成物件,而不是在程式碼中直接new 2、單例模式:使某個類的物件僅允許建立一個 3、註冊模式:全域性共享和交換物件 工廠模式: <?php namespace IMooc; class Fac

工廠模式模式的理解

正式學java也那麼久了,今天就來梳理一下java的工廠模式(據說這是java23例模式中最簡單的一種模式) 所謂的工廠模式大概就是通過一個介面實現對子類的呼叫,當初我接觸工廠模式的時候,還沒意識到原來這就是工廠模式, 當時老師是據了一個抽獎系統的例子,大概是這樣,先寫一個

java中工廠模式模式詳解

如何將例項化具體類的程式碼從應用中抽離或者封裝起來,使它們不會干擾應用的其他部分? 1:簡單工廠模式:其作用是例項化物件而不需要客戶瞭解這個物件屬於那個具體的子類。 using System; using System.Collections; public class MyClass {  

java設計模式---淺談2種工廠模式模式

1、 工廠模式  。比如有一個統一介面  A   ,這個A介面是一個標準  。如果有類  B  和 C   那麼 BC必須實現A介面  。 我們在以往的 方法生成這種物件的時候   A  b=new  B() ;  A c=new C() ;這樣的方式來的 .但是如果不同的

常用設計者模式---工廠模式模式

從今天起(2017.2.14),我要開始系統認真的啃基礎,堅持下去,每天進步一點點。 一、什麼是設計者模式(what)? 最早提出“設計模式”概念的是建築設計大師亞力山大Alexander。在他的《建築的永恆之道》裡這樣描述:模式是一條由三個部分組成的通用規則:它表示了一個

php面向物件(工廠模式模式

今天剛學習了php的設計模式,一個是工廠模式而另一個是單例模式,工廠模式設計出來就是為了一種方便建立物件而做出來的。還有一個是單例模式,單例模式的設計有些比較難以理解,我們必須一步一步的分析:單例類的情況必須去建立類的例項,而且必須只有一個,首先沒有物件例項的情況就是將它的

JAVA中的工廠模式模式講解

轉載:http://blog.csdn.net/fangleijiang/article/details/19912667 1.單例模式 單例模式是一種常用的軟體設計模式。在它的核心結構中只包含一個被稱為單例類的特殊類。通過單例模式可以保證系統中一個類只有一個例項而且該例

簡單工廠模式模式以及MVC模式

本文是對簡單工廠模式、單例模式、以及MVC模式的簡單介紹。 至於你問,為什麼把這三種模式放在一起講,筆者目前也很懵逼,因為這是一個作業... 好了,言歸正傳。 一、簡單工廠模式(Simple Fact

自己對設計模式的理解:工廠模式模式

一、工廠模式:個人總結class  Factory {static function createObject($par){if ($par == 1) {$test1 = new Object1();} elseif ($par == 2) {$test2 = new O

scala 基礎十二 scala apply的使用工廠方法和模式的實現

定義 其他 返回 pack 新的 true 伴生對象 args null 1. apply 可以用來實現類似於靜態的初始化類的實例,請看下面實例 package smart.iot class applyclass { } class A {

【JAVA】基礎:設計模式設計模式工廠設計模式

設計模式:解決某一類問題最行之有效的方法。 java中有23種設計模式。 建立型模式(5種):工廠方法模式,抽象工廠模式,單例模式,建造者模式,原型模式。 結構型模式(7種):介面卡模式,裝飾器模式,代理模式,外觀模式,橋接模式,組合模式,享元模式。 行為型模式(11種):策略模式、模板方法

設計模式模式工廠模式介面卡模式

1:設計模式是什麼? 前人總結的一些經驗和思想,給我們提供了從抽象到具體的方法 總共有23種 分類: 建立型模式: 建立物件。(其實建立物件比較耗記憶體的動作) 結構型模式: 物件的組成。 行為模式: 物件能夠做什

java中幾種設計模式模式介面卡模式簡單工廠模式

1、單例模式:也分餓漢式單例模式(建立物件)與懶漢式單例模式(未建立物件)程式碼實現:餓漢式單例模式:懶漢式單例模式:2、介面卡模式:介面:實現介面的類:實現介面某個方法的類:3、簡單工廠模式:介面:類1:類2:工廠類:測試類:

Java 設計模式學習-模式&工廠模式

最近看一個專案的原始碼,裡面的很多程式碼都不是很懂,原來是因為不理解程式碼中的設計模式,在一些大神的部落格中,學習一一些設計模式的知識,現把學習的內容記錄下來。 單例模式 單例模式是常用的設計模式,在java 應用中,能保證在一個JVM中,該物件只有一個例項存在,這樣的設計有幾個好處

模式最好的實現方式靜態內部類的方式

單例模式的優點: 1.在記憶體中只有一個物件,節約記憶體 2.避免頻繁的建立和銷燬物件,可以提高效能 3.避免對共享資源的多重佔用 4.可以全域性訪問 適用場景: 1.需要頻繁例項化然後銷燬的物件 2.