1

這是一個比任何問題更多的結構/設計哲學問題。我應該保存宿主活動或其碎片的持久數據嗎?

我有主要的主機活動,當前保存和加載配置文件供用戶查看。 配置文件的憑據顯示在片段A(用戶名,生日等)中。這是通過將配置文件作爲參數傳遞給片段來完成的,然後再使用片段事務來顯示它。

如果用戶離開或旋轉他們的屏幕,我應該如何去保存該配置文件數據?我應該從片段A或其HostActivity中的onPause進行保存嗎?

如果片段A還允許配置文件編輯呢?當用戶確認他們的變化時,我是否應該讓HostActivity知道從活動中更新主要個人資料?

或者等到一個FragmentA.onPause被調用後會更好嗎?我想我可以等到某些東西強制片段調用onPause,此時我可以保存片段的狀態以及主機活動的配置文件活動。

令我困惑的主要問題是:我是否需要管理兩個Profile對象? HostActivity及其FragmentA都使用它。在保存,加載和編輯之間來回運行會讓人有點困惑。我不能從一個班級處理所有這些嗎?

好吧,我有兩個非常好的和可行的答案。哪一個更適合我的目的?我應該使用sqlLite數據庫還是全局Java單例來處理我的配置文件?每個會話只能有一個配置文件被激活。還必須考慮保存,加載和編輯配置文件。

回答

0

如果在一個會話中每個用戶只能有一個配置文件(如上所述),爲什麼不使用Java singleton class

private ProfileOject() { 
    // Exists only to defeat instantiation. 
} 

public static ProfileObject getInstance() { 
    if(instance == null) { 
     instance = new ProfilerObject(); 
    } 
    return instance; 
} 

現在正常使用getter和setters。

在每一個活動,你可以得到Profile像這樣:

profile = ProfileObject.getInstance(); 

這將意味着,如果你在Fragment A,當activity被稱爲進行更新,它將從profile object獲取更新的值。

在問候onRotate/Pause/Resume使用savedInstanceState,見下面的例子:

//Use onSaveInstanceState(Bundle) and onRestoreInstanceState 

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 

    // Save UI state changes to the savedInstanceState. 
    // This bundle will be passed to onCreate if the process is 
    // killed and restarted. 

    savedInstanceState.putBoolean("MyBoolean", true); 
    // etc. 
    super.onSaveInstanceState(savedInstanceState); 
} 
//onRestoreInstanceState 
    @Override 
public void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    // Restore UI state from the savedInstanceState. 
    // This bundle has also been passed to onCreate. 
    boolean myBoolean = savedInstanceState.getBoolean("MyBoolean"); 
} 
+0

這也是一個可行的選擇。你能告訴我如何使用單例可能比使用SQLite數據庫更好嗎? –

+0

@ TonyN.Tran它意味着數據將在應用程序中快速訪問而不是在數據庫中(如果遠程則需要相當長的時間才能訪問)如果本地可能會更快,但我還沒有使用過這樣的數據庫我不會是最好的徵求意見。就我個人而言,我認爲使用'singleton類'可以更快,因爲您不必編寫任何'SQL',對於您的場景,似乎它可能更簡單。看到[這裏](http://developer.android.com/guide/topics/data/data-storage.html)更多關於從android開發指南存儲的信息 – ilovepjs

+0

我決定使用你的方法,因爲只有一個配置文件可以一次激活。配置文件可以在本地或通過雲端保存/加載,但一次只能加載一個。但是,我會爲我的應用程序的另一部分使用SQLite,這將確實需要一個數據庫。所以感謝你的建議@rosorio。 :) –

0

爲什麼不使用sqlite數據庫來存儲用戶配置文件數據?每次您需要訪問用戶配置文件數據時,您都可以查詢它。

您可以將所有相關數據保存在onPause方法中。使用數據庫將確保數據持久性,抵抗任何片段/活動娛樂!

+0

通過的onPause,您碎片造成的意思的onPause,對不對? –

+0

是的,您應該將數據保存在片段A的onPause中。您還應該在片段A內部需要時加載數據,因爲這是將配置文件顯示給用戶的地方。 – rosorio

+0

我明白了。你能告訴我如何使用SQLite數據庫可能比使用單例更好嗎? –

相關問題