2017-04-26 64 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);