2017-05-29 23 views
0

私は描かれているカードに関連してルールを表示するアプリケーションを開発しています。ユーザーは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の変更を確認するにはどうすればよいですか?

答えて

0

onPauseメソッドでは、.edit()。putX()。apply()を共有のprefsオブジェクトに保存することができます

関連する問題