アプリでアクティビティをテストすると、PreferenceActivityを使用して設定した値を使用していないことがわかります。
値がPrefsActivityで(少なくとも「ローカルに」)正しく設定されていることを確認できます。これは、開くたびに、前回閉じたときとまったく同じ設定になっているためです...
設定を保存する設定ファイルをPreferenceActivityで指定する必要がありますか、それともアクティビティで使用するためにそれらの値をインポートするために使用しているメソッドに問題がありますか?その質問に対する明確な答えを見つけることなく、Web全体を検索したような気がします...
これは私のアクティビティが設定をロードすることになっている場所です、それは正しく見えますか?デバッグモードで実行し、使用する値を手動で入力すると、計算が正常に機能するため、これが唯一の欠落していることを知っています...
public void OnStart() {
// Loads the values for the calculator to use
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
bodymass = settings.getInt(getString(R.string.pref_key_user_mass).toString(), 0);
gender = settings.getString(getString(R.string.pref_key_user_gender).toString(), "");
また、この次のコードはあなたにとって正しいように見えますか?(誰かが一度に複数の変数を比較する「if」ステートメントを作成する方法を教えてくれたら、私も感謝します-たとえば、if(3つのフィールドのうちの1つが空です){何かをする})
//Checks defined user gender and sets value to be used by calc accordingly
if (gender == "male") {
genderValue = 0.7;
}
else if (gender == "female") {
genderValue = 0.6;
}
else if (gender == "") {
settingsAlert();
}
すべてのアプリデータがワイプされた場合でも、settingsAlert()関数がトリガーされることはないようです(アラートメッセージが生成され、使用する前にユーザーに設定を設定するように求められますが、何も起こりません)
アラートを生成することになっているコードは次のとおりです。
public void settingsAlert() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("@string/dialog_setPrefs_text")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Intent gotoSettings = new Intent(ActivityCalc.this, ActivitySettings.class);
startActivity(gotoSettings);
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
finish();
}
})
.create();
}
- アップデート -
これで、アラートダイアログが正常に生成されるようになりました。それを実現したコード行を投稿して、同じ問題を抱えている他のユーザーが監視および学習できるようにすることにしました... :)
問題は、アラートが実際に正しく作成されたが、実際に表示するように呼び出されなかったことであるように見えました。したがって、最後の行の少し.show()
後に追加すると、すべてが完全に機能しました。.create()
または、AlertDialogオブジェクトとして定義し、必要に応じて呼び出すこともできます。
AlertDialog alert = builder.create();
alert.show();
PreferenceActivityクラスの内容をここに投稿します。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// This line will import the preferences to display in the settings activity
addPreferencesFromResource(R.xml.settings);
}
設定リソースファイルを作成する方法については、この記事を参照してください
代わりにDefaultSharedPreferencesを使用するようにget-methodを変更したため、使用する共有設定の名前を指定するための文字列を含めなくなりました。
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
これで、残りのアクティビティで永続化するために必要な変数のみを定義して初期化しました。
private double genderValue = 0;
private String gender = "";
private int bodymass = 0;
アプリは正常に動作するようになりました。クラッシュせず、PreferenceActivityで設定された設定が正しく読み込まれます。