2014-11-11 2 views
0

나는 50 Buttons입니다. 아래 그림과 같이 switch 문을 사용합니다. case에는 각각 On-Click 코드가 있습니다. 그러나 각각의 코드에 많은 변경을가합니다. 코드를 동일한 방식으로 50 번 변경하는 것은 지루한 작업이고 매우 반복적입니다. Button 내 코드는 현재 다음과 같습니다변수를 사용하는 스위치 케이스, 반복 코드

public void ButtonOnClick(View v) { 

    switch (v.getId()) { 
     case button1: 
      if(button_list.get(1).getTag().equals("0")) 
       enter_txt.setText(enter_txt.getText()+button_list.get(1).getText().toString()); 
      is_clicked= (String)button_list.get(1).getTag();  
      if ("0".equals(is_clicked)){ 
       button_list.get(1).setBackgroundResource(R.drawable.button_pressed); 
       button_list.get(1).setTag("1"); 
      }else{ 
        button_list.get(1).setBackgroundResource(R.drawable.button_normal); 
        button_list.get(1).setTag("0"); 
      } 
      break; 
     case button2: 
      if(button_list.get(2).getTag().equals("0")) 
       enter_txt.setText(enter_txt.getText()+button_list.get(2).getText().toString()); 
      is_clicked= (String)button_list.get(2).getTag();  
      if ("0".equals(is_clicked)){ 
       button_list.get(2).setBackgroundResource(R.drawable.button_pressed); 
       button_list.get(2).setTag("1"); 
      }else{ 
        button_list.get(2).setBackgroundResource(R.drawable.button_normal); 
        button_list.get(2).setTag("0"); 
      } 
      break; 
     case button3: 
      if(button_list.get(3).getTag().equals("0")) 
       enter_txt.setText(enter_txt.getText()+button_list.get(3).getText().toString()); 
      is_clicked= (String)button_list.get(3).getTag();  
      if ("0".equals(is_clicked)){ 
       button_list.get(3).setBackgroundResource(R.drawable.button_pressed); 
       button_list.get(3).setTag("1"); 
      }else{ 
        button_list.get(3).setBackgroundResource(R.drawable.button_normal); 
        button_list.get(3).setTag("0"); 
      } 
      break; 
     case button4: 
      if(button_list.get(4).getTag().equals("0")) 
       enter_txt.setText(enter_txt.getText()+button_list.get(4).getText().toString()); 
      is_clicked= (String)button_list.get(4).getTag();  
      if ("0".equals(is_clicked)){ 
       button_list.get(4).setBackgroundResource(R.drawable.button_pressed); 
       button_list.get(4).setTag("1"); 
      }else{ 
        button_list.get(4).setBackgroundResource(R.drawable.button_normal); 
        button_list.get(4).setTag("0"); 
      } 
      break; 
     case button5: 
      if(button_list.get(5).getTag().equals("0")) 
       enter_txt.setText(enter_txt.getText()+button_list.get(5).getText().toString()); 
      is_clicked= (String)button_list.get(5).getTag();  
      if ("0".equals(is_clicked)){ 
       button_list.get(5).setBackgroundResource(R.drawable.button_pressed); 
       button_list.get(5).setTag("1"); 
      }else{ 
        button_list.get(5).setBackgroundResource(R.drawable.button_normal); 
        button_list.get(5).setTag("0"); 
      } 
      break; 
     case button6: 
      if(button_list.get(6).getTag().equals("0")) 
       enter_txt.setText(enter_txt.getText()+button_list.get(6).getText().toString()); 
      is_clicked= (String)button_list.get(6).getTag();  
      if ("0".equals(is_clicked)){ 
       button_list.get(6).setBackgroundResource(R.drawable.button_pressed); 
       button_list.get(6).setTag("1"); 
      }else{ 
        button_list.get(6).setBackgroundResource(R.drawable.button_normal); 
        button_list.get(6).setTag("0"); 
      } 
      break; 
     case button7: 
      if(button_list.get(7).getTag().equals("0")) 
       enter_txt.setText(enter_txt.getText()+button_list.get(7).getText().toString()); 
      is_clicked= (String)button_list.get(7).getTag();  
      if ("0".equals(is_clicked)){ 
       button_list.get(7).setBackgroundResource(R.drawable.button_pressed); 
       button_list.get(7).setTag("1"); 
      }else{ 
        button_list.get(7).setBackgroundResource(R.drawable.button_normal); 
        button_list.get(7).setTag("0"); 
      } 
      break; 
     case button8: 
      if(button_list.get(8).getTag().equals("0")) 
       enter_txt.setText(enter_txt.getText()+button_list.get(8).getText().toString()); 
      is_clicked= (String)button_list.get(8).getTag();  
      if ("0".equals(is_clicked)){ 
       button_list.get(8).setBackgroundResource(R.drawable.button_pressed); 
       button_list.get(8).setTag("1"); 
      }else{ 
        button_list.get(8).setBackgroundResource(R.drawable.button_normal); 
        button_list.get(8).setTag("0"); 
      } 
      break; 
     case button9: 
      if(button_list.get(9).getTag().equals("0")) 
       enter_txt.setText(enter_txt.getText()+button_list.get(9).getText().toString()); 
      is_clicked= (String)button_list.get(9).getTag();  
      if ("0".equals(is_clicked)){ 
       button_list.get(9).setBackgroundResource(R.drawable.button_pressed); 
       button_list.get(9).setTag("1"); 
      }else{ 
        button_list.get(9).setBackgroundResource(R.drawable.button_normal); 
        button_list.get(9).setTag("0"); 
      } 
      break; 
      case button10: 
       if(button_list.get(10).getTag().equals("0")) 
        enter_txt.setText(enter_txt.getText()+button_list.get(10).getText().toString()); 
       is_clicked= (String)button_list.get(10).getTag();  
       if ("0".equals(is_clicked)){ 
        button_list.get(10).setBackgroundResource(R.drawable.button_pressed); 
        button_list.get(10).setTag("1");  
       }else{ 
         button_list.get(10).setBackgroundResource(R.drawable.button_normal); 
         button_list.get(10).setTag("0");  
       } 
       break; 

I 각 버튼을 위해 50 시간을 만들 필요가 없습니다 내가 변경할 경우 각각의 case에 액세스하기 위해 일반 변수를 사용할 수있는 방법이 있나요? 나는 이런 식으로 생각했다 :

public void ButtonOnClick(View v) { 

    switch (v.getId()) { 
     case button[i] 
      if(button_list.get(i).getTag().equals("0")) 
       enter_txt.setText(enter_txt.getText()+button_list.get(i).getText().toString()); 
      is_clicked= (String)button_list.get(i).getTag();  
      if ("0".equals(is_clicked)){ 
       button_list.get(i).setBackgroundResource(R.drawable.button_pressed); 
       button_list.get(i).setTag("1"); 
      }else{ 
        button_list.get(i).setBackgroundResource(R.drawable.button_normal); 
        button_list.get(i).setTag("0"); 
      } 
      break; 

이 방법이 가능합니까? 또는 내가 할 필요가있는 다른 것이 있습니까? OnClick 메서드를 변경하려고 할 때마다 코드를 50 번 변경하지 않아도됩니까?

+0

작동 알려줘 있습니까의 내용 '버튼 자체 button_list'? 즉,'v.getId (()'가'button14' 인 경우'button_list.get (14)'는'v'('ButtonOnClick'에게 건네지는)와 동일한 뷰입니까? –

+0

yes button_list 내용은 버튼 자체입니다. 예, 다른 질문 (제 생각에는?) – user2456977

답변

2

ButtonOnClick은 버튼의 클릭 핸들러라고 가정합니다. 더 나아가 어떤 i이라도 button_list.get(i)의 내용이 버튼이라고 가정합니다. 그렇다면 인수 v은 목록에 저장된 Button 개체와 같습니다. 당신은 Boolean 객체 대신 버튼 태그로 String 객체를 사용하는 것이 좋습니다, 여담으로

public void ButtonOnClick(View v) { 
    Button btn = (Button) v; 
    if (btn.getTag().equals("0")) { 
     enter_txt.setText(enter_txt.getText()+btn.getText().toString()); 
    } 
    is_clicked= (String) btn.getTag(); 
    if ("0".equals(is_clicked)){ 
     btn.setBackgroundResource(R.drawable.button_pressed); 
     btn.setTag("1"); 
    }else{ 
     btn.setBackgroundResource(R.drawable.button_normal); 
     btn.setTag("0"); 
    } 
} 

: 그런 다음에 전체 핸들러를 줄일 수 있습니다.

+0

당신은 당신의 가정에 합당합니다.하지만 당신의 코드로, 프로그램은 어떻게 알 수 있습니까? 3 번째 버튼이나 15 번째 버튼을 클릭하면? 버튼 btn = (버튼) v – user2456977

+0

@ user2456977 - 클릭 핸들러의 코드를 살펴보면 버튼 하나에서 다른 버튼까지는 아무 것도하지 않습니다. 프로그램은 인자로 전달 된 태그와 배경을 수정할 버튼을 알고 있습니다. –

+0

이것은입니다. 너무 고마워요. – user2456977

1

먼저 코드 코드를 붙여 넣지 마십시오. 다른 방법으로 코드를 추출하십시오. 당신은 당신이 모든 버튼을 저장의 ArrayList를 사용하는 경우

, 당신은 아마 미래에 너무 쉽게 다른 버튼 동작을 처리 할 수있는, 그래서 그냥이 한 개 ButtonOnClick 방법을 대체 ArrayList.indexOf(Object o) 를 사용할 수 있습니다

public void ButtonOnClick(View v) { 
    if(button_list.contains(v)) 
    { 
      setButtonBackground(button_list.indexOf(v)); 
    } 
} 

private setButtonBackground(int buttonNumber) 
{ 
    Button myButton = (Button) button_list.get(buttonNumber); 

    if(myButton.getTag().equals("0")) 
    { 
     enter_txt.setText(enter_txt.getText()+myButton.getText().toString()); 
    } 

    is_clicked = (String) myButton.getTag(); 

    if ("0".equals(is_clicked)) 
    { 
     myButton.setBackgroundResource(R.drawable.button_pressed); 
     myButton.setTag("1"); 
    } 
    else 
    { 
     myButton.setBackgroundResource(R.drawable.button_normal); 
     myButton.setTag("0"); 
    } 
} 

코드 복사 및 붙여 넣기 대신 개발하는 경우 바로 단축키를 사용하여 메서드에 추출하면되므로 시간을 절약 할 수 있습니다.

[...] 
case button1: 
     setButtonBackground(1); 
     break; 
case button2: 
     setButtonBackground(2); 
     break; 
[...] 

은 당신

+0

덕분에 도움이되었습니다. – user2456977