android - preference教學 - preferencescreen




如何從Android中的PreferenceActivity獲取SharedPreferences? (4)

不得不在任何地方傳遞上下文真的很煩人。 代碼變得太冗長而難以管理。 我在每個項目中都會這樣做......

public class global {
    public static Activity globalContext = null;

並將其設置在主要活動創建中

@Override
public void onCreate(Bundle savedInstanceState) {
    Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler(
            global.sdcardPath,
            ""));
    super.onCreate(savedInstanceState);

    //Start 
    //Debug.startMethodTracing("appname.Trace1");

    global.globalContext = this;

所有的偏好鍵都應該獨立於語言,我很震驚沒有人提到這一點。

getText(R.string.yourPrefKeyName).toString()

現在在一行代碼中簡單地調用它

global.globalContext.getSharedPreferences(global.APPNAME_PREF, global.MODE_PRIVATE).getBoolean("isMetric", true);

我正在使用PreferenceActivity為我的應用程序顯示一些設置。 我通過xml文件膨脹設置,以便我的onCreate(和完整的類方法)如下所示:

public class FooActivity extends PreferenceActivity {
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        addPreferencesFromResource(R.xml.preference);
    }
}

PreferenceActivity PreferenceFragment的javadoc聲明

這些首選項會在用戶與它們交互時自動保存到SharedPreferences。 要檢索此活動中首選層次結構將使用的SharedPreferences實例,請使用與此活動相同的包中的上下文調用getDefaultSharedPreferences(android.content.Context)。

但是,我如何在另一個活動中獲得SharedPreference的名稱? 我只能打電話

getSharedPreferences(name, mode)

在其他活動中,但我需要PreferenceActivity使用的SharedPreference的名稱。 什麼是名字,或者我該如何找回它?


如果你有一個複選框,你想在任何java文件中獲取它的值,例如true / false--

使用 -

Context mContext;
boolean checkFlag;

checkFlag=PreferenceManager.getDefaultSharedPreferences(mContext).getBoolean(KEY,DEFAULT_VALUE);`

首先聲明這些方法..

public static void putPref(String key, String value, Context context) {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putString(key, value);
    editor.commit();
}

public static String getPref(String key, Context context) {
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
    return preferences.getString(key, null);
}

然後在你想要使用pref時調用它:

putPref("myKey", "mystring", getApplicationContext());

當你想要得​​到一個優先級時調用它:

getPref("myKey", getApplicationContext());

或者你可以使用這個對象https://github.com/kcochibili/TinyDB--Android-Shared-Preferences-Turbo ,它甚至可以進一步簡化一切

例:

TinyDB tinydb = new TinyDB(context);

tinydb.putInt("clickCount", 2);
tinydb.putFloat("xPoint", 3.6f);
tinydb.putLong("userCount", 39832L);

tinydb.putString("userName", "john");
tinydb.putBoolean("isUserMale", true); 

tinydb.putList("MyUsers", mUsersArray);
tinydb.putImagePNG("DropBox/WorkImages", "MeAtlunch.png", lunchBitmap);

import android.preference.PreferenceManager;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
// then you use
prefs.getBoolean("keystring", true);

更新

根據共享首選項| 由Sai Geetha MN撰寫的Android開發者教程(第13部分)

許多應用程序可能提供一種方法來捕獲用戶對特定應用程序或活動設置的首選項。 為了支持這一點,Android提供了一組簡單的API。

首選項通常是名稱值對。 它們可以作為“共享首選項”存儲在應用程序中的各種活動中(請注意,目前不能在各個進程間共享)。 或者它可能是需要針對某個活動存儲的內容。

  1. 共享首選項:共享首選項可以被應用程序的所有組件(活動,服務等)使用。

  2. 處理偏好的活動:這些偏好只能在特定活動中使用,並且不能被應用程序的其他組件使用。

共享首選項:

共享首選項在Context類的getSharedPreferences方法的幫助下進行管理。 首選項存儲在默認文件(1)中,或者您可以指定用於引用首選項的文件名(2)

(1) 推薦的方法是使用默認模式,而不指定文件名

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);

(2)以下是在指定文件名時如何獲取實例

public static final String PREF_FILE_NAME = "PrefFile";
SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);

MODE_PRIVATE是首選項的操作模式。 這是默認模式,意味著創建的文件只能被調用應用程序訪問。 其他兩種支持的模式是MODE_WORLD_READABLEMODE_WORLD_WRITEABLE 。 在MODE_WORLD_READABLE其他應用程序可以讀取創建的文件,但不能修改它。 在MODE_WORLD_WRITEABLE情況下,其他應用程序也對創建的文件具有寫入權限。

最後,一旦你有了首選項實例,以下是你可以從首選項中檢索存儲值的方法:

int storedPreference = preferences.getInt("storedInt", 0);

要將值存儲在首選項文件SharedPreference.Editor對像中必須使用。 EditorSharedPreference類中的嵌套接口。

SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

編輯器還支持像remove()clear()這樣的方法從文件中刪除首選項值。

活動首選項:

共享首選項可以被其他應用程序組件使用。 但是,如果您不需要與其他組件共享首選項並希望獲得活動私人首選項,則可以使用該活動的getPreferences()方法執行此操作。 getPreference方法使用getSharedPreferences()方法和活動類的名稱作為首選項文件名。

以下是獲取偏好的代碼

SharedPreferences preferences = getPreferences(MODE_PRIVATE);
int storedPreference = preferences.getInt("storedInt", 0);

存儲值的代碼也與共享首選項的情況相同。

SharedPreferences preferences = getPreference(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

您還可以使用其他方法,例如將活動狀態存儲在數據庫中。 注意Android還包含一個名為android.preference的包。 該包定義了實現應用程序首選項UI的類。

要查看更多示例,請查看開發者網站上的Android 數據存儲文章。





sharedpreferences