1. ホーム

[解決済み】AndroidでPreferenceActivityからSharedPreferencesを取得する方法は?

2022-03-24 11:44:23

質問

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

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

のjavadocは プリファレンス・アクティビティ プリファレンスフラグメント は、次のように記述します。

これらのプリファレンスは、ユーザーとのインタラクションに応じて、自動的にSharedPreferencesに保存されます。このアクティビティでプリファレンス階層が使用するSharedPreferencesのインスタンスを取得するには、このアクティビティと同じパッケージのコンテキストでgetDefaultSharedPreferences(android.content.Context)を呼び出します。

しかし、別のActivityでSharedPreferenceの名前を取得するにはどうしたらよいでしょうか。私は、次のように呼び出すことしかできません。

getSharedPreferences(name, mode)

が、PreferenceActivityで使用されたSharedPreferenceの名前が必要です。また、その名前を取得する方法はありますか?

解決方法を教えてください。

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

更新情報

によると 共有環境設定|Android Developer Tutorial (第13回) by Sai Geetha M N,

多くのアプリケーションは、ユーザーの好みを取得する方法を提供することがあります。 特定のアプリケーションやアクティビティの設定 これをサポートするために 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_READABLEMODE_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 の データストレージ の記事をご覧ください。