386

PreferenceActivityを使用して、アプリケーションのいくつかの設定を表示しています。onCreate(および完全なクラスメソッド)が次のようになるように、xmlファイルを介して設定を拡張しています。

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の名前が必要です。名前は何ですか、またはどのように取得できますか?

4

6 に答える 6

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

アップデート

共有設定による| Android デベロッパー チュートリアル (パート 13) by Sai Geetha MN、

多くのアプリケーションは、特定のアプリケーションまたはアクティビティの設定に関するユーザー設定をキャプチャする方法を提供する場合があります。これをサポートするために、Android は単純な一連の API を提供します。

プリファレンスは通常、名前と値のペアです。これらは、アプリケーション内のさまざまなアクティビティで「共有設定」として保存できます (現在、プロセス間で共有できないことに注意してください)。または、アクティビティに固有に保存する必要があるものである場合もあります。

  1. 共有設定: 共有設定は、アプリケーションのすべてのコンポーネント (アクティビティ、サービスなど) で使用できます。

  2. アクティビティ処理設定: これらの設定は、特定のアクティビティ内でのみ使用でき、アプリケーションの他のコンポーネントでは使用できません。

共有設定:

共有設定は、クラスのgetSharedPreferencesメソッドを使用して管理されます。Contextプリファレンスは、デフォルトのファイル(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プリファレンスの動作モードです。これはデフォルトのモードであり、作成されたファイルには呼び出し元のアプリケーションのみがアクセスできることを意味します。サポートされている他の 2 つのモードはMODE_WORLD_READABLE、 とMODE_WORLD_WRITEABLEです。他MODE_WORLD_READABLEのアプリケーションでは、作成したファイルを読み取ることはできますが、変更することはできません。他のアプリケーションの場合MODE_WORLD_WRITEABLE、作成したファイルへの書き込み権限も持っています。

最後に、設定インスタンスを取得したら、保存された値を設定から取得する方法を次に示します。

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

設定ファイルにを保存するには、SharedPreference.Editorオブジェクトを使用する必要があります。クラスEditorにネストされたインターフェイスです。SharedPreference

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 のデータ ストレージの投稿を確認してください。

于 2010-04-10T20:03:40.177 に答える
28

にアクセスできない場合はgetDefaultSharedPreferenes()、代わりに を使用できますgetSharedPreferences(name, mode)。正しい名前を渡すだけです。

Android がこの名前を作成します (おそらくプロジェクトのパッケージ名に基づいていますか?)。次のコードを に入れ、SettingsActivity onCreate()内容を確認することで取得できますpreferencesName

String preferencesName = this.getPreferenceManager().getSharedPreferencesName();

文字列は次のようになりcom.example.projectname_preferencesます。プロジェクトのどこかにそれをハードコードして、に渡すと、準備が整いますgetSharedPreferences()

于 2010-08-23T00:35:29.557 に答える
22

これらのメソッドを最初に宣言します。

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);
}

次に、設定を入れたいときにこれを呼び出します:

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);
于 2013-06-16T04:07:29.353 に答える
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()

1行のコードでこのように非常に簡単に呼び出します

global.globalContext.getSharedPreferences(global.APPNAME_PREF, global.MODE_PRIVATE).getBoolean("isMetric", true);
于 2013-08-18T04:20:52.373 に答える