私はレニクが言うことをしますが、それらを静的にせず、代わりに怠惰に初期化します。
public class MyApplication extends Application {
public SharedPreferences preferences;
public SharedPreferences getSharedPrefs(){
if(preferences == null){
preferences = getSharedPreferences( getPackageName() + "_preferences", MODE_PRIVATE);
}
return preferences;
}
次に、あなたの見解で:
MyApplication app = (MyApplication) getContext().getApplicationContext();
SharedPreferences settings = app.getSharedPrefs();
エリックが言うように、この Application クラスはマニフェストで宣言する必要があります。
<application android:name=".MyApplication"
android:icon="@drawable/icon"
android:label="@string/app_name">
参照:
getApplicationContext()
Android グローバル変数
編集
(あなたのコメントから)問題は、実際にデータを保存していないことです。この行は、実際に変数を保存していないという意味がありません:
editor.putString("Data", (Data));
上記の使用例を次に示します。
MyApplication app = (MyApplication) getContext().getApplicationContext();
SharedPreferences settings = app.getSharedPrefs();
String str = settings.getString("YourKey", null);
そして、設定に何かを保存するには:
settings.edit().putString("YourKey", "valueToSave").commit();
カスタム ビューで使用する具体的な例は次のとおりです。
public class MyView extends View {
SharedPreferences settings;
// Other constructors that you may use also need the init() method
public MyView(Context context){
super(context);
init();
}
private void init(){
MyApplication app = (MyApplication) getContext().getApplicationContext();
settings = app.getSharedPrefs();
}
private void someMethod(){ // or onTouch() etc
settings.edit().putString("YourKey", "valueToSave").commit(); //Save your data
}
private void someOtherMethod(){
String str = settings.getString("YourKey", null); //Retrieve your data
}
}