練習として、9個の乱数がある9個のボタンを「下に」表示する一種のtictactoe Androidアプリを書いています。ユーザーはボタンをクリックしてペアを見つけなければなりません。Android:ボタンをクリックした後の動作
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//Shows the About Game screen
public void showAboutGame(View v)
{
setContentView(R.layout.about_game);
}
public void showGame(View v)
{
setContentView(R.layout.gameplay);
GridView gv = (GridView)findViewById(R.id.gridView);
ImageButtonAdapter iba = new ImageButtonAdapter(this);
gv.setAdapter(iba);
}
ImageButtonAdapterは、各ボタン
for(int i=0;i<buttons.length;i++){
if(buttons[i]==null) buttons[i] = new ImageButton(c);
buttons[i].setOnClickListener(new ButtonOnClickListener(c, buttonValueSet.get(i), i, this));
}
ためonClickListenerを設定します:私はネット上で見つけた三目並べのサンプルを適応してい として、私はImageButtonAdapterをこのように呼び出すMainActivityを持っていますButtonOnClickListenerは、値のイメージをクリックしたボタンに設定します。アダプターでcheckHit()メソッドを使用するために、ImageButtonAdapter(this)への参照を送信しようとしました:
public class ButtonOnClickListener implements View.OnClickListener {
int value;
int index;
ImageButtonAdapter adapter;
int foundPairs;
int previousValue;
boolean firstClick = true;
int firstNumber;
private Context context;
//Constructor
public ButtonOnClickListener(int value, int index, ImageButtonAdapter adapter) {
this.value = value;
this.index = index;
this.adapter = adapter;
}
@Override
public void onClick(View v) {
ImageButton btn = (ImageButton) v;
switch (value) {
case 1:
btn.setBackgroundResource(R.drawable.n_1);
break;
case 2:
btn.setBackgroundResource(R.drawable.n_2);
break;
case 3:
btn.setBackgroundResource(R.drawable.n_3);
break;
case 4:
btn.setBackgroundResource(R.drawable.n_4);
break;
case 5:
btn.setBackgroundResource(R.drawable.n_5);
break;
case 6:
btn.setBackgroundResource(R.drawable.n_6);
break;
case 7:
btn.setBackgroundResource(R.drawable.n_7);
break;
case 8:
btn.setBackgroundResource(R.drawable.n_8);
break;
case 9:
btn.setBackgroundResource(R.drawable.n_9);
break;
default:
btn.setBackgroundResource(R.drawable.n_0);
}
adapter.checkHit(value);
}
}
これは、単純なcheckHit()である:
public void checkHit(int value){
if(firstHit == true){
previousValue = value;
firstHit = false;
} else if(value == previousValue){
Toast.makeText(c, "You hit a pair!", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(c, "This is not a pair!", Toast.LENGTH_SHORT).show();
}
}
そしてこのすべてが動作します。 私の問題は、ユーザーが数字のペアを見つけたかどうかを確認した後、開始イメージとペアになっていないすべてのボタンを「閉じる」必要があるということです。これを行うために、私はcheckHit()を次のように変更しようとしました:
public void checkHit(int value){
if(firstHit == true){
previousValue = value;
firstHit = false;
} else if(value == previousValue){
Toast.makeText(c, "You hit a pair!", Toast.LENGTH_SHORT).show();
closeAllAvailableButtons();
} else {
Toast.makeText(c, "This is not a pair!", Toast.LENGTH_SHORT).show();
closeAllAvailableButtons();
}
}
これは機能しません。リスナーの冒頭陳述
btn.setBackgroundResource(R.drawable.n_1);
がadapter.checkHit(値)が実行された後にのみ実行されるためです。言い換えれば、ボタンの値に対応するイメージのクリックと割り当ての間に、プログラムがリフレッシュします。 結果はクリックで、クリック音ですがボタンイメージは変化しません。 私の問題は、ボタンをクリックした後にゲームの流れに戻る方法がわからないことだと思います。 私はインテントを使うことができたと思っていますが、ImageButtonAdapterはアクティビティではありませんので、私が理解しているところでインテントで呼び出すことはできません。 誰でも助けてくれますか? あらかじめ忍耐していただきありがとうございます。