2013-11-23 43 views
1

我目前有這一點的代碼,但我需要重複它的紅色綠色和藍色,有沒有辦法我可以做到這一點,而無需複製和粘貼代碼3次?適用於Android的Java,代碼重複

yellow.setOnClickListener(new View.OnClickListener() {  
     public void onClick (View v) { 

      switch (buttonCount) { 
      case 1: 
       empty1.setImageResource(R.drawable.yellow); 
       buttonCount++; 
       guess1= Colour.YELLOW; 
       break; 
      case 2: 
       empty2.setImageResource(R.drawable.yellow); 
       buttonCount++; 
       guess2=Colour.YELLOW; 
       break; 
      case 3: 
       empty3.setImageResource(R.drawable.yellow); 
       buttonCount++; 
       guess3=Colour.YELLOW; 
       break; 
      case 4: 
       empty4.setImageResource(R.drawable.yellow); 
       buttonCount++; 
       guess4=Colour.YELLOW; 
       break; 
      case 5: 
       empty5.setImageResource(R.drawable.yellow); 
       buttonCount++; 
       guess5=Colour.YELLOW; 
       break; 

      } 
     } 
    }); 
+3

爲它寫一個方法並調用它?你在哪裏卡住? – pbond

+0

我不知道語法..我明白你在說什麼我只是不明白如何寫它。 –

回答

1

我不知道很多機器人,但你可以定義一個私有類

private class MyClickListener implements View.OnClickListener{ 

    private final String colour; 
    private final String imageResource; 

    public MyClickListener(String colour, String imageResource){ 
     this.colour = colour; 
     this imageResource = imageResource; 
    } 

    @Override 
    public void onClick (View v) { 

      switch (buttonCount) { 
      case 1: 
       empty1.setImageResource(imageResource); 
       buttonCount++; 
       guess1= colour; 
       break; 
      case 2: 
       empty2.setImageResource(imageResource); 
       buttonCount++; 
       guess2=colour; 
       break; 
      case 3: 
       empty3.setImageResource(imageResource); 
       buttonCount++; 
       guess3=colour; 
       break; 
      case 4: 
       empty4.setImageResource(imageResource); 
       buttonCount++; 
       guess4=colour; 
       break; 
      case 5: 
       empty5.setImageResource(imageResource); 
       buttonCount++; 
       guess5=colour; 
       break; 

      } 
     } 
} 

並在您的客戶端代碼

yellow.setOnClickListener(new View.OnClickListener(new MyClickListener(Colour.YELLOW)); 

此外,而不是使用了很多的變數與empty1empty2相同的類型,您可以將它們放在一個集合中,如List,最好是ArrayList,與相同guessN然後在你的代碼

  list.get(buttonCount).setImageResource(imageResource); 
      list.set(buttonCount,colour); 
      buttonCount++; 
+1

'R.drawable.yellow'也可能需要參數化。 –

+0

@DonRoby你說得對,我編輯 – nachokk

1

您可以哪個按鈕被點擊,然後設置從適當的圖像,繼承人快速examle(儘管這取決於你的ID可能不工作的代碼)很容易抽象了這一點,通過檢查:

public void onClick (View v) { 
    int drawable = 0; 
    Colour guess = null; 
    switch (v.getId()) 
    { 
     case R.id.yellowButton: 
      drawable = drawable; 
      guess = Colour.YELLOW; 
      break; 
     case R.id.blueButton: 
      drawable = R.drawable.blue; 
      guess = Colour.BLUE 
      break; 
     case R.id.redButton: 
      drawable = R.drawable.red; 
      guess = Colour.RED 
      break; 
     case R.id.greenButton: 
      drawable = R.drawable.green; 
      guess = Colour.GREEN 
      break; 
    } 
    switch (buttonCount) 
    { 
    case 1: 
     empty1.setImageResource(drawable); 
     buttonCount++; 
     guess1= guess; 
     break; 
    case 2: 
     empty2.setImageResource(drawable); 
     buttonCount++; 
     guess2=guess; 
     break; 
    case 3: 
     empty3.setImageResource(drawable); 
     buttonCount++; 
     guess3=guess; 
     break; 
    case 4: 
     empty4.setImageResource(drawable); 
     buttonCount++; 
     guess4=guess; 
     break; 
    case 5: 
     empty5.setImageResource(drawable); 
     buttonCount++; 
     guess5=guess; 
     break; 

    } 
} 

那麼你可以只是簡單地註冊按鈕來此的onClick方法(通過XML或以編程方式)

0

你可以使用反射來做到這一點,但你應該知道危險的反射BRI的NG。無論如何,你的代碼應該是這樣的:

Button button; 
    Class c = Class.forName("your.package.name.R$id"); 
    Field field = c.getDeclaredField("empty"+buttonCount); 
    button = (Button) findViewById(field.getInt(null)); 
    button.setImageResource(R.drawable.yellow); 

圍繞它與所有必要的例外。

編輯:行:c.getDeclaredField("empty"+buttonCount);你必須使用它們在佈局xml中聲明的實際ID。我認爲它是「empty1」,「empty2」...「empty5」