2010-10-26 69 views
0

我在我的應用程序中有幾個活動,我想利用共享首選項。最初,我在每個活動中創建了一個方法來利用SharedPreferences,它工作正常。但是,由於有多個使用相同數據的活動,所以我基本上在多個地方使用相似的方法。因此,爲了處理所有這些方法,專門創建一個類似乎更有意義。如何創建一個專門用於使用SharedPreferences的類?

不幸的是,我不明白如何正確地做到這一點。

這不會編譯,因爲它說:「getSharedPreferences是未定義類型AppPrefs。」

public class AppPrefs { 
public void foo() { 
    SharedPreferences settings = getSharedPreferences("MyAppPrefs", 0); 
} 
} 

最後,我想,也許因爲SharedPreferences是一個接口,我可以做到這一點,但後來我d必須實現繼承的方法。我沒有理由覆蓋任何這些方法,所以沒有理由這樣做。

public class AppPrefs implements SharedPreferences { 
public void foo() { 
    SharedPreferences settings = getSharedPreferences("MyAppPrefs", 0); 
} 
} 

在這裏做什麼是有道理的?我有沒有一個概念?任何人都可以詳細解釋嗎?謝謝。

回答

1

將您的上下文傳遞到您的偏好吸氣器。

public class AppPrefs { 
public static void foo(Context ctx) { 
    SharedPreferences settings = ctx.getSharedPreferences("MyAppPrefs", 0); 
} 
} 

現在只要在this通過從活動類foo()

1

如果首選項對應用程序是全局的,則當需要訪問通用首選項時,可以使用PreferenceManager.getDefaultSharedPreferences();。如果偏好特定的Activities一個子集,你有幾個不同的選擇:

,您可以撥打Activity子類,它是由需要訪問喜好的所有類擴展:

public abstract class AbstractFooActivity extends Activity 
{ 
    protected SharedPreferences getFooPreferences() 
    { 
     return getSharedPreferences(PREFS_NAME, MODE_PRIVATE); 
    } 

    private static final String PREFS_NAME = "FooPrefs"; 
} 

public class AFooActivity extends AbstractFooActivity 
{ 
    public void aMethodThatNeedsPrefs() 
    { 
     // ... 
     SharedPreferences myPrefs = getFooPreferences(); 
    } 
} 

或者,如果像我一樣,你不想惹惱類的層次結構,你可以簡單地爲需要訪問首選項的一組活動創建一個共同的常量值。這在您需要訪問首選項的Activity層次之外的課程中很有用。例如,一個Service

public final class FooConstants 
{ 
    public static final String FOO_PREFS_NAME = "FooPrefs"; 
} 

public class AFooActivity extends Activity 
{ 
    public void aMethodThatNeedsPrefs() 
    { 
     // ... 
     SharedPreferences myPrefs = getSharedPreferences(FOO_PREFS_NAME, MODE_PRIVATE); 
    } 
} 

public class AFooService extends Service 
{ 
    public void aMethodThatNeedsPrefs() 
    { 
     // ... 
     SharedPreferences myPrefs = getSharedPreferences(FOO_PREFS_NAME, MODE_PRIVATE); 
    } 
} 

第二種方法是稍微少封裝,但穿的對象層次結構,這在我看來是一個很好的折衷較少的限制。

+0

所以,它看起來像我不能沒有擴展活動或實現該接口使用SharedPreferences。似乎很可笑,我需要創建一個子活動只是使用SharedPreferences。雖然好信息! – user432209 2010-10-26 14:40:18

相關問題