2017-04-26 63 views
0

所以我们正在研究一个问答游戏/应用程序,我们只有一件事情有问题。 我们得到了4个可能的答案按钮,只有其中一个是正确的(明显)。他们是正规的按钮,上面有文字,而不是无线电。问题是,为了避免为每个问题创建一个活动,我们希望将按钮保存在一个活动中,并且在按下“正确答案”时将按钮功能更改为不同。例如,按钮1,2,3都会让玩家在屏幕上显示,而按钮4则是正确的。然后,它应该改变按钮上显示的文本并更改所有按钮的功能,以使1,3,4现在成为“游戏结束按钮”,2是正确的。我们尝试了如果语句和整数以及布尔值,都无济于事。任何可以帮助我们的提示或解决方案? 谢谢如何将按钮所具有的功能更改为不同的功能?

+1

嘿Konrol。欢迎来到Stack Overflow。我建议分享你的代码,以及迄今为止投入了多少努力。 –

+0

请编辑您的问题并加入相关的源代码。 – ventiseis

回答

1

鉴于您目前的设置,我会让每个按钮的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 
    } 
} 
0

在你的问题类,你可以答案设置为文本/按钮的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(); 
    } 
} 

源:Butterknife docs

0

你可以使用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);