[解決済み】AndroidでPreferenceActivityからSharedPreferencesを取得する方法は?
質問
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を提供しています。
プリファレンスは通常、名前と値のペアです。これらは、以下のように保存することができます。 アプリケーション内の様々なアクティビティにまたがる「共有プリファレンス」(注 現在、プロセス間で共有することはできません)。あるいは アクティビティごとに保存する必要があるもの。
-
共有プリファレンス。共有プリファレンス:アプリケーションのすべてのコンポーネント(アクティビティ、サービスなど)が使用できるプリファレンスです。
-
アクティビティが扱うプリファレンス。これらの設定は、特定のアクティビティ内でのみ使用でき、アプリケーションの他のコンポーネントで使用することはできません。
共有の環境設定。
共有プリファレンスの管理には
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 の データストレージ の記事をご覧ください。
関連
-
[解決済み] Eclipse デフォルトのフォント名
-
[解決済み] Java Genericメソッドをstaticにするには?
-
[解決済み] ファイルを作成せずに、ファイルが存在するかどうかをチェックする
-
[解決済み] javaでメソッドを呼び出すプログラムのエラー修正
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み] Javaで文字列値からenum値を取得する方法
-
[解決済み] AndroidのListViewで画像を遅延ロードする方法
-
[解決済み] Androidで画面の大きさをピクセル単位で取得する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Eclipse デフォルトのフォント名
-
[解決済み] Firebase クラスにシリアライズするプロパティが見つからない
-
[解決済み] コレクションへの共有参照が見つかりました org.hibernate.HibernateException
-
[解決済み] raw 型のメンバへのアンチェックの呼び出し
-
[解決済み] 1行目2列目でBEGIN_ARRAYを期待したが、BEGIN_OBJECTだった。
-
[解決済み] eclipseからTomcatに物理的に発行されるmyjspはどこにあるのでしょうか?
-
[解決済み] 午前0時からの時間を秒単位で取得する方法
-
[解決済み] スリーピング中のスレッドが割り込まれ、データベースへの接続が失われる
-
[解決済み] init-paramとcontext-param
-
[解決済み】AndroidでSharedPreferencesにオブジェクトを保存/格納するにはどうすればいいですか?