私が見つけた解決策の別の更新
上記の方法(クリックしたボタンのシーケンスをリストに保存する)で解決策が見つからなかったので、別のアプローチを試しました。今回は、無効/クリック不可のボタンを返すメソッドによって、ボタンのクリック可能/有効なプロパティを使用しました。
public List<TextView> getFreePos(){
TextView[] randomletters = {randomLetter1, randomLetter2, randomLetter3,
randomLetter4, randomLetter5, randomLetter6, randomLetter7};
int i;
for( i=0; i<randomletters.length; i++){
if(randomletters[i].isClickable()== false){
clickable.add(randomletters[i]);
}
}
return clickable;
}
次に、各テキストビューでそれを使用して、テキストビューのテキストが最初のリストのオブジェクトと等しいかどうかを確認します。
String wLetter = wordLetter1.getText().toString();
if(isEmpty(wordLetter1)){
getFreePos().clear();
getFreePos();
if(clickable.get(0).getText().toString().equals(wLetter)){
clickable.get(0).setText(wLetter);
clickable.get(0).setClickable(true);
clickable.get(0).setEnabled(true);
}
else if(clickable.get(1).getText().toString().equals(wLetter)){
clickable.get(1).setText(wLetter);
clickable.get(1).setClickable(true);
clickable.get(1).setEnabled(true);
}
else if (clickable.get(2).getText().toString().equals(wLetter)){
clickable.get(2).setText(wLetter);
clickable.get(2).setClickable(true);
clickable.get(2).setEnabled(true);
}
else if (clickable.get(3).getText().toString().equals(wLetter)){
clickable.get(3).setText(wLetter);
clickable.get(3).setClickable(true);
clickable.get(3).setEnabled(true);
}
else if (clickable.get(4).getText().toString().equals(wLetter)){
clickable.get(4).setText(wLetter);
clickable.get(4).setClickable(true);
clickable.get(4).setEnabled(true);
}
else if (clickable.get(5).getText().toString().equals(wLetter)){
clickable.get(5).setText(wLetter);
clickable.get(5).setClickable(true);
clickable.get(5).setEnabled(true);
}
else if (clickable.get(6).getText().toString().equals(wLetter)){
clickable.get(6).setText(wLetter);
clickable.get(6).setClickable(true);
clickable.get(6).setEnabled(true);
}
}
wordLetter1.setText("");
この方法で問題なく動作しますが、これらすべての if ステートメントを回避する方法を見つけることができませんでした (上記のコードに 7 を掛けたもの)。次のように for ループを使用しようとしました。
for (int i=0; i<clickable.size(); i++){
if (wLetter.equals(clickable.get(i).getText().toString()))
clickable.get(i).setText(wLetter);
clickable.get(i).setEnabled(true);
clickable.get(i).setClickable(true);
wordLetter3.setText("");
break;
また、if ステートメントの代わりにスイッチ ケースを使用することもできましたが、どちらも期待どおりに機能しませんでした。インデックスの範囲外エラー (毎回発生するわけではありません) と、間違ったボタンが有効になり、間違った文字に変更されるという問題がありました。したがって、結論として、上記の if/else if 方法のみが期待どおりに機能します。コードが短くコンパクトになればいいのですが。何か考え/アイデアはありますか?