私は描かれているカードに関連してルールを表示するアプリケーションを開発しています。ユーザーはSettingsActivity
にカスタムルールを設定でき、これはGameActivity
にロードされます。SharedPreferencesは変更時には更新されず、アプリのリセット時にのみ更新されますか?
これは問題ありませんが、ユーザーがルールを変更するか、デフォルトにリセットする場合は、GameActivity
でこれを更新する唯一の方法は、アプリケーションを完全に終了して再起動することです。私はを使ってみましたが、うまくいきませんでした。私がfinish()
を使用したとき、それは完全にアプリを完全に終了しました。
GameActivity
では、onResume()
メソッドのloadRulesメソッドへの呼び出しも試みましたが、何もしませんでした。 SettingsActivityから切り取ら
コード:
public void setDefault(View v){
ruleAce = rules[0];
ruleTwo = rules[1];
ruleThree = rules[2];
ruleFour = rules[3];
ruleFive = rules[4];
ruleSix = rules[5];
ruleSeven = rules[6];
ruleEight = rules[7];
ruleNine = rules[8];
ruleTen = rules[9];
ruleJack = rules[10];
ruleQueen = rules[11];
ruleKing = rules[12];
saveRules();
}
private void saveRules(){
SharedPreferences ace, two, three, four, five, six, seven, eight, nine, ten, jack, queen, king;
SharedPreferences.Editor editor;
ace = getSharedPreferences(SETTINGS, Context.MODE_PRIVATE);
editor = ace.edit();
editor.putString(RULE_ACE, ruleAce);
editor.apply();
two = getSharedPreferences(SETTINGS, Context.MODE_PRIVATE);
editor = two.edit();
editor.putString(RULE_TWO, ruleTwo);
editor.apply();
three = getSharedPreferences(SETTINGS, Context.MODE_PRIVATE);
editor = three.edit();
editor.putString(RULE_THREE, ruleThree);
editor.apply();
four = getSharedPreferences(SETTINGS, Context.MODE_PRIVATE);
editor = four.edit();
editor.putString(RULE_FOUR, ruleFour);
editor.apply();
five = getSharedPreferences(SETTINGS, Context.MODE_PRIVATE);
editor = five.edit();
editor.putString(RULE_FIVE, ruleFive);
editor.apply();
six = getSharedPreferences(SETTINGS, Context.MODE_PRIVATE);
editor = six.edit();
editor.putString(RULE_SIX, ruleSix);
editor.apply();
seven = getSharedPreferences(SETTINGS, Context.MODE_PRIVATE);
editor = seven.edit();
editor.putString(RULE_SEVEN, ruleSeven);
editor.apply();
eight = getSharedPreferences(SETTINGS, Context.MODE_PRIVATE);
editor = eight.edit();
editor.putString(RULE_EIGHT, ruleEight);
editor.apply();
nine = getSharedPreferences(SETTINGS, Context.MODE_PRIVATE);
editor = nine.edit();
editor.putString(RULE_NINE, ruleNine);
editor.apply();
ten = getSharedPreferences(SETTINGS, Context.MODE_PRIVATE);
editor = ten.edit();
editor.putString(RULE_TEN, ruleTen);
editor.apply();
jack = getSharedPreferences(SETTINGS, Context.MODE_PRIVATE);
editor = jack.edit();
editor.putString(RULE_JACK, ruleJack);
editor.apply();
queen = getSharedPreferences(SETTINGS, Context.MODE_PRIVATE);
editor = queen.edit();
editor.putString(RULE_QUEEN, ruleQueen);
editor.apply();
king = getSharedPreferences(SETTINGS, Context.MODE_PRIVATE);
editor = king.edit();
editor.putString(RULE_KING, ruleKing);
editor.apply();
}
GameActivityスニペット:それはprintCard()
、showRule()
、およびnewGame()
にちょうど方法であるとした後
public class kingGame extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_king_game);
loadRules();
shuffleDeck();
}
@Override
protected void onResume(){
super.onResume();
setContentView(R.layout.activity_king_game);
loadRules();
}
//Sets the Rules
static String aceRule, twoRule, threeRule, fourRule, fiveRule, sixRule, sevenRule, eightRule, nineRule, tenRule, jackRule, queenRule, kingRule;
static String[] defaultrules = {DEFAULT RULES IN HERE}
public void loadRules(){
SharedPreferences settings;
settings = getSharedPreferences(SETTINGS, Context.MODE_PRIVATE);
aceRule = settings.getString(RULE_ACE, defaultrules[0]);
twoRule = settings.getString(RULE_TWO, defaultrules[1]);
threeRule = settings.getString(RULE_THREE, defaultrules[2]);
fourRule = settings.getString(RULE_FOUR, defaultrules[3]);
fiveRule = settings.getString(RULE_FIVE, defaultrules[4]);
sixRule = settings.getString(RULE_SIX, defaultrules[5]);
sevenRule = settings.getString(RULE_SEVEN, defaultrules[6]);
eightRule = settings.getString(RULE_EIGHT, defaultrules[7]);
nineRule = settings.getString(RULE_NINE, defaultrules[8]);
tenRule = settings.getString(RULE_TEN, defaultrules[9]);
jackRule = settings.getString(RULE_JACK, defaultrules[10]);
queenRule = settings.getString(RULE_QUEEN, defaultrules[11]);
kingRule = settings.getString(RULE_KING, defaultrules[12]);
}
/* Creates the Deck */
/* Shuffles the Deck */
public void shuffleDeck(){
cardsLeft = 52;
cardNum = 0;
for (int i = 0; i < RANK.length; i++){
for (int j=0; j < SUITS.length; j++){
deck[SUITS.length*i + j] = RANK[i] + " Of " + SUITS[j];
}
}
for (int i = 0; i < n; i++){
int r = i + (int) (Math.random() * (n-i));
String temp = deck[r];
deck[r] = deck[i];
deck[i] = temp;
}
}
/* Button Press Draws the Card */
public void drawCard(View view) {}
。
newGameは、ゲームが終了すると(デッキの最後まで)呼び出されます。
showRuleは、カードが描画されるのに応じてaceRule、twoRuleなどにロードされたルールを表示します。
描画カードが表示されます。
私の質問は、GameActivity
がアクティビティが再開されたときにSharedPreferences
の変更を確認するにはどうすればよいですか?