※ ChatGPTを利用し、要約された質問です(原文:JAVAのプリファレンスがうまくいかず困っています)
JAVAのプリファレンスの扱いに困っています
このQ&Aのポイント
独学で勉強している初心者ですが、JAVAのプリファレンスの扱いについて困っています。
アンドロイドアプリのシューティングゲームを作りながらプリファレンスを保存する画面を作りたいのですが、うまくいきません。
現在のコードでは、アクティビティでしかプリファレンスを扱えず、初期画面に戻ると設定が元に戻ってしまいます。どのようにすれば解決できるでしょうか?
JAVAのプリファレンスがうまくいかず困っています
独学で勉強初めてまだ一ヶ月程度なのですがプリファレンスの扱いがうまくいかず困っています。
とりあえずアンドロイドアプリのシューティングゲームを作りながら判らなかったら調べつつ進めているので、根本的に間違っているかもですが御教授頂ければと思います。
ゲームのステータスをいじる画面をviewクラスで作り保存できるようにと思ったのですが、アクティビティでしかプリファレンスを扱えず無理やりやろうとしてこうなってしまいました。
-------------------------
public class SettingActivity extends Activity {
int speed;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
//プリファレンスの準備
speed = pref.getInt("speed",1);
//呼び出し 第二引数は初期値
LinearLayout l = new LinearLayout(this);
l.setOrientation(LinearLayout.VERTICAL);
setContentView(l);
l.addView(new Setting(this));
}
@Override
protected void onPause() {
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
//プリファレンスの準備
Setting set = new Setting(this);
Editor date = pref.edit();
date.putInt("speed",set.getSpeed());
date.commit();
//保存
super.onPause();
}
--------------------------------
public class Setting extends View {
SettingActivity activity = (SettingActivity)this.getContext();
int speed = activity.speed;
void setSpeed(int sp) {
speed = sp;
}
int getSpeed() {
return speed;
}
public void onDraw(Canvas c) {
super.onDraw(c);
if(画面の表示が変わったとき)
speed = 表示の値に;
setSpeed(speed);
}
-----------------------------
色々調べた結果このような感じになったのですが、どうしても最初の画面に戻ったら元に戻ってしまいます。
どのようにすればうまくいきますでしょうか?
よろしくお願いします。
お礼
ありがとうございます。 viewクラスでプリファレンスの引数にコンテキストを渡したactivityクラスを入れることで解決できました! (言葉の使い方が合っているかわかりません・・・) 最初うまくいかなかったのはviewクラスで.getDefaultSharedPreferences(this);と書き込んでいたのがいけなかったようです。 的確なアドバイスありがとうございました。