私はAndroidでフラッシュカードアプリを書いています.チェックボックスを付けて単語をレビューリストに追加する機能を追加しようとしました. ユーザーが次の単語に移動すると、チェックボックスがオンになっているかどうかがわかります。そうである場合は、その単語をレビュー リストに追加し、そうでない場合はその単語を削除します。携帯電話とエミュレーターでテストしたところ、チェックボックスがオンになっているときに次の単語またはホームページに移動しようとするたびに、強制的に閉じられました。LogCat ページには行番号や発生したエラーが表示されないため、エラーの原因がわかりません。
チェックを入れていないときは、問題なく単語をめくることができます。それをチェックして別の単語に行くことが問題の原因であるため、SharedPreferencesに関係していると推測しています。
私が持っている重要な方法は次のとおりです。
public void onCreate(Bundle savedInstanceState)
{
//other code
reviewCheckBox = (CheckBox) findViewById(R.id.reviewCheckBox);
prefs = getPreferences(MODE_PRIVATE);
editor = prefs.edit();
reviewCards = prefs.getAll().keySet();
}
public void home(View v)
{
if (flashCardPage.getVisibility() == View.VISIBLE)
{
if (reviewCheckBox.isChecked())
reviewCards.add(currentCard.getTerm());
else
reviewCards.remove(currentCard.getTerm());
updateReviewCards();
}
//other code
}
public void nextWord(View v)
{
currentPosition++;
if (currentPosition == flashCards.size())
{
home(wordTV);
}
else
{
if (reviewCheckBox.isChecked())
reviewCards.add(currentCard.getTerm());
else
reviewCards.remove(currentCard.getTerm());
//other code
if (reviewCards.contains(currentCard.getTerm()))
reviewCheckBox.setChecked(true);
else
reviewCheckBox.setChecked(false);
}
}
public void previousWord(View v)
{
if (currentPosition > 0)
{
if (reviewCheckBox.isChecked())
reviewCards.add(currentCard.getTerm());
else
reviewCards.remove(currentCard.getTerm());
//other code
if (reviewCards.contains(currentCard.getTerm()))
reviewCheckBox.setChecked(true);
else
reviewCheckBox.setChecked(false);
}
}
public void updateReviewCards()
{
editor.clear();
for (String card : reviewCards)
editor.putString(card, card);
editor.commit();
}