如何将按钮所具有的功能更改为不同的功能?
所以我们正在研究一个问答游戏/应用程序,我们只有一件事情有问题。 我们得到了4个可能的答案按钮,只有其中一个是正确的(明显)。他们是正规的按钮,上面有文字,而不是无线电。问题是,为了避免为每个问题创建一个活动,我们希望将按钮保存在一个活动中,并且在按下“正确答案”时将按钮功能更改为不同。例如,按钮1,2,3都会让玩家在屏幕上显示,而按钮4则是正确的。然后,它应该改变按钮上显示的文本并更改所有按钮的功能,以使1,3,4现在成为“游戏结束按钮”,2是正确的。我们尝试了如果语句和整数以及布尔值,都无济于事。任何可以帮助我们的提示或解决方案? 谢谢如何将按钮所具有的功能更改为不同的功能?
鉴于您目前的设置,我会让每个按钮的onClick调用方法如validateCorrectAnswer(int buttonNumber)
,然后从那里你会做你的验证。所以对于button1,你可以拨打validateCorrectAnswer(1)
。
从validateCorrectAnswer(...)
你会有一个正确的答案阵列,所以它可能是类似于int[] correctAnswers = {4, 2, 3, 4, 1, 3, 2, 1, ...};
和取决于他们在哪个问题上你会检查。假设您在问题3中检查correctAnswers[2] == buttonNumber
。
因此,为了进一步简化您的活动存储中他们当前在全局变量中的问题,如private int currentQuestion = 0
,然后在每个问题后增加该数字。
所以最终的方法是这样的:
void validateCorrectAnswer(int buttonNumber) {
if (correctAnswer[currentQuestion] == buttonNumber) {
currentQuestion++;
// correct answer, cool move on
} else {
// wrong answer, game over
}
}
在你的问题类,你可以答案设置为文本/按钮的ID和检查上的按钮,只要单击一下按钮上的文字/ id是和你的答案一样。
另外,请参见本实施例中从butterknife:
//Specify multiple IDs in a single binding for common event handling.
@OnClick({ R.id.door1, R.id.door2, R.id.door3 })
public void pickDoor(DoorView door) {
if (door.hasPrizeBehind()) {
Toast.makeText(this, "You win!", LENGTH_SHORT).show();
} else {
Toast.makeText(this, "Try again", LENGTH_SHORT).show();
}
}
你可以使用setTag(tagValue)和getTag(tagValue)方法的4个按钮。
1 - 正确
0 - 错
然后就是根据给出的答案切换tagValues。
@Override
public void onClick(View view) {
int answer = 0;
if(view instanceof Button) {
answer = (int) ((Button)view).getTag();
}
if(answer == 1) {
//true answer
refreshButtons();
} else {
//game over
}
Log.d("TAG", "a: "+answer);
}
public void refreshButtons() {
questionNr ++;
Log.d("TAG", "q: "+questionNr);
setAnswers(questionNr);
}
public void setAnswers (int question) {
switch (question){
case 1: // Second question
v1.setTag(0);//wrong
v2.setTag(1);//correct
v3.setTag(0);//wrong
v4.setTag(0);//wrong
break;
case 2:// Third question
v1.setTag(0);//wrong
v2.setTag(0);//wrong
v3.setTag(1);//correct
v4.setTag(0);//wrong
break;
case 3:// Forth question
v1.setTag(0);//wrong
v2.setTag(0);//wrong
v3.setTag(0);//wrong
v4.setTag(1);//correct
break;
}
}
你也设置在同一setAnswer()方法
的onCreate()方法用于其他意见的文本可能是这样的:
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//here you setup the answers for the first question
v1 = (Button) findViewById(R.id.button1);
v1.setOnClickListener(this);
v1.setTag(1);
v2 = (Button) findViewById(R.id.button2);
v2.setOnClickListener(this);
v2.setTag(0);
v3 = (Button) findViewById(R.id.button3);
v3.setOnClickListener(this);
v3.setTag(0);
v4 = (Button) findViewById(R.id.button4);
v4.setOnClickListener(this);
v4.setTag(0);
嘿Konrol。欢迎来到Stack Overflow。我建议分享你的代码,以及迄今为止投入了多少努力。 –
请编辑您的问题并加入相关的源代码。 – ventiseis