2012-07-19 54 views
0

這是生成隨機字符串的類文件。Android中按鈕的條件檢查

public class RandomGen { 
    static String keys() { 
     String str[] = new String[25]; 
     str[0] = "Press A1"; 
     str[1] = "Press A2"; 
     str[2] = "Press A3"; 
     str[3] = "Press A4"; 
     str[4] = "Press A5"; 
     str[5] = "Press B1"; 
     str[6] = "Press B2"; 
     str[7] = "Press B3"; 
     str[8] = "Press B4"; 
     str[9] = "Press B5"; 
     str[10] = "Press C1"; 
     str[11] = "Press C2"; 
     str[12] = "Press C3"; 
     str[13] = "Press C4"; 
     str[14] = "Press C5"; 
     str[15] = "Press D1"; 
     str[16] = "Press D2"; 
     str[17] = "Press D3"; 
     str[18] = "Press D4"; 
     str[19] = "Press D5"; 
     str[20] = "Press E1"; 
     str[21] = "Press E2"; 
     str[22] = "Press E3"; 
     str[23] = "Press E4"; 
     str[24] = "Press E5"; 

     Random randomGenerator = new Random(); 
     int randomInt = randomGenerator.nextInt(25); 
     return str[randomInt]; 
    } 
} 

這是android活動文件。我從課程中返回隨機文本並以文本視圖顯示。如果返回的字符串是「按A1」,用戶應該只按下Al按鈕。如果他按下其他按鈕,則必須在其他文本視圖中顯示錯誤消息。下一次,如果在該文本視圖中顯示「按下C1」,用戶應該只按下C1按鈕。如果他按下其他按鈕「錯誤的按鈕」消息必須顯示。我不知道如何檢查病情。請幫幫我。

RandomGen rg = new RandomGen(); 
    String s; 
    b[0].setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      s = rg.keys(); 
      tv.setText(s); 
      tv2.setText("A1 is pressed"); 
     } 
    }); 
    b[1].setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      s = rg.keys(); 
      tv.setText(s); 
      tv2.setText("A2 is pressed"); 
     } 
    }); 
    b[2].setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      s = rg.keys(); 
      tv.setText(s); 
      tv2.setText("A3 is pressed"); 

     } 
    }); 
    b[3].setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      s = rg.keys(); 
      tv.setText(s); 
      tv2.setText("A4 is pressed"); 
     } 
    }); 
+2

你的問題是不是在所有 – 2012-07-19 09:49:43

+0

雅清楚。對不起。我從課程中返回隨機文本並以文本視圖顯示。如果返回的字符串是「按A1」,用戶應該只按下Al按鈕。如果他按下其他按鈕,則必須在其他文本視圖中顯示錯誤消息。下一次,如果在該文本視圖中顯示「按下C1」,用戶應該只按下C1按鈕。如果他按下其他按鈕「錯誤的按鈕」消息必須顯示。這正是我想要做的。 – 2012-07-19 09:55:25

回答

0

這裏有很多代碼重複。恕我直言,這是你應該做的。

創建一個靜態的最終文本數組,其中包含所有按鈕的文本。

創建一個Map<View, String>,其中包含與每個按鈕相關的文本(除非Android允許將某些文本與某個按鈕相關聯,在這種情況下,您甚至不需要此地圖)。

對於每個按鈕添加相同的偵聽器:

View.OnCliskListener theListener = new View.OnClickListener() { 
    public void onClick(View buttonClicked) { 
     String textOfTheButtonClicked = map.get(buttonClicked); 
     if (!textOfTheButtonClicked.equals(theTextChosenRandomly)) { 
      // do what you want here 
     } 
    } 
}; 
+0

複雜。但這是可能的。雅。謝謝。 – 2012-07-19 10:17:27

0

如果你想測試這個,我會建議創建一個具有兩個實現的RandomGenerator接口。一個實現返回一組預定義的結果,另一個使用Random來提供答案。

通過這種方式,可以在測試過程中使用預定義的RandomGenerator,在應用程序運行過程中使用隨機RandomGenerator。

下面的代碼演示了上面說明的設置。在您的密鑰方法中傳遞一個IntegerGenerator並像這樣使用它:

public static String keys(IntegerGenerator generator) { 
    // code to create keys str 
    int randomInt = generator.nextInt(str.length); 
    return str[randomInt]; 

} 

interface IntegerGenerator { 
    public int nextInt(int maximum); 
} 

class PredefinedIntegerGenerator implements IntegerGenerator { 

    private final int[] values; 
    private int index; 

    public PredefinedIntegerGenerator(int[] values) { 
     this.values = values; 
     this.index = 0; 
    } 

    @Override 
    public int nextInt(int maximum) { 
     if (index >= values.length) { 
      index = 0; 
     } 
     return values[index]; 

    } 
} 

class RandomIntegerGenerator implements IntegerGenerator { 

    private final Random random; 

    public RandomIntegerGenerator(Random random) { 
     this.random = random; 
    } 

    @Override 
    public int nextInt(int maximum) { 
     return random.nextInt(maximum); 
    } 
} 
+0

好的。我會試試這個。謝謝。 – 2012-07-19 10:18:37