アプリケーションの設定をいくつか表示するためにPreferenceActivityを使用しています。 onCreate(および完全なクラスメソッド)が次のようになるように、xmlファイルを使用して設定を拡張しています。
public class FooActivity extends PreferenceActivity {
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
addPreferencesFromResource(R.xml.preference);
}
}
のJavadoc PreferenceActivity PreferenceFragment は、
これらの設定は、ユーザーが対話したときに自動的にSharedPreferencesに保存されます。このアクティビティの設定階層で使用されるSharedPreferencesのインスタンスを取得するには、このアクティビティと同じパッケージ内のコンテキストを使用してgetDefaultSharedPreferences(Android.content.Context)を呼び出します。
しかし、どのようにして別のアクティビティでSharedPreferenceの名前を取得するのですか?電話しかできない
getSharedPreferences(name, mode)
他のアクティビティでは、PreferenceActivityで使用されていたSharedPreferenceの名前が必要です。名前は何ですか、またはそれをどのように取得できますか?
import Android.preference.PreferenceManager;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
// then you use
prefs.getBoolean("keystring", true);
更新
に従ってください。 Sai Geetha M NによるAndroid開発者チュートリアル(パート13)
多くのアプリケーションは、特定のアプリケーションの設定やアクティビティに関するユーザーの好みを捉える方法を提供します。これをサポートするために、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の Data Storage を開発者サイトに投稿してください。
getDefaultSharedPreferenes()
にアクセスできない場合は、代わりにgetSharedPreferences(name, mode)
を使用できます。正しい名前を渡すだけです。
Androidは(おそらくあなたのプロジェクトのパッケージ名に基づいて)この名前を作成します。次のコードをSettingsActivity
onCreate()
に入れて、preferencesName
が何であるかを見ることによってそれを得ることができます。
String preferencesName = this.getPreferenceManager().getSharedPreferencesName();
文字列はcom.example.projectname_preferences
のようになります。あなたのプロジェクトのどこかにハードコードし、それをgetSharedPreferences()
に渡してください。
最初にこれらのメソッドを宣言してください。
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);
どこにでも文脈を渡らなければならないのは本当に厄介です。コードが冗長すぎて管理できなくなります。代わりにすべてのプロジェクトでこれを行います...
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);
チェックボックスがあり、その値を取得したい場合は、任意のJavaファイルでtrue/falseを指定します -
つかいます -
Context mContext;
boolean checkFlag;
checkFlag=PreferenceManager.getDefaultSharedPreferences(mContext).getBoolean(KEY,DEFAULT_VALUE);`
2019年更新
あなたは単にPowerPreference
ライブラリを使うことができます
https://github.com/AliEsaAssadi/Android-Power-Preference
デフォルトのインスタンスを取得するには、あなたが呼び出す必要があります
PowerPreference.getDefaultFile()
特定の設定ファイルが必要な場合
PowerPreference.getFileByName(fileName)
PowerPreference.getDefaultFile().put(key,value)
PowerPreference.getDefaultFile().getString(key,value)