본문 바로가기

android

계산기 만들기 3편 - 버튼에 함수 연결하기

반응형

Hello DH.

 

 

지난 시간 아래와 같이 Layout을 구성하였다.

 

 

아래와 같이 모든 버튼에 ID를 넣었다.

 

'C'가 표시된 버튼은 am_buttonClear라는 ID가 설정되어 있다.

 

 

 

1. 함수 연결하기

 

아래의 빨간색의 테두리 상자의 ID와 녹색 상자의 표시 이름을 확인한다.

이 ID ( 예 - am_buttonClear )을 사용하여 'C'가 표시된 버튼이 눌리면 동작하는 함수를 구분한다.

 

  • ID를 구분하는 코드 넣기

아래 그림과 같이 Projector 탭에서 폴더를 열면서 아래로 내려가면 MainActivity 찾을 수 있다.

MainActivity 안에서 onCreate()함수를 찾는다.

 

 

아래와 같이 onCreate() 함수를 찾는다.

 

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

 

위 코드 바로 아래에 아래와 같이 buttonNumberListener을 생성한다.

 

Button.OnClickListener buttonNumberListener = new Button.OnClickListener() {
    @Override
    public void onClick(View view) {
        int id = view.getId();

        switch (id) {
            case R.id.am_button0: {
                break;
            }
            case R.id.am_button1: {
                break;
            }
        }
    }
};

 

현재는 am_button0, am_button1만 있지만 layout에 있는 모든 버튼을 위와 같이 추가한다.

모두 20개이다.

 

전체 코드

 

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button.OnClickListener buttonNumberListener = new Button.OnClickListener() {
        @Override
        public void onClick(View view) {
            int id = view.getId();

            switch (id) {
                case R.id.am_button0: {
                    break;
                }
                case R.id.am_button1: {
                    break;
                }
                case R.id.am_button2: {
                    break;
                }
                case R.id.am_button3: {
                    break;
                }
                case R.id.am_button4: {
                    break;
                }
                case R.id.am_button5: {
                    break;
                }
                case R.id.am_button6: {
                    break;
                }
                case R.id.am_button7: {
                    break;
                }
                case R.id.am_button8: {
                    break;
                }
                case R.id.am_button9: {
                    break;
                }
                case R.id.am_buttonClear: {
                    break;
                }
                case R.id.am_buttonCurlyBrackets: {
                    break;
                }
                case R.id.am_buttonPercentage: {
                    break;
                }
                case R.id.am_buttonDevide: {
                    break;
                }
                case R.id.am_buttonMultiple: {
                    break;
                }
                case R.id.am_buttonMinus: {
                    break;
                }
                case R.id.am_buttonPlus: {
                    break;
                }
                case R.id.am_buttonPositiveNegativeNumber: {
                    break;
                }
                case R.id.am_buttonPoint: {
                    break;
                }
                case R.id.am_buttonEqual: {
                    break;
                }
            }
        }
    };
}

 

  • 버튼과 함수 연결하기

이제 우리는 사용자가 버튼을 눌렀을 때 각각의 버튼을 구분할 수 있게 되었다.

하지만 아직 버튼과 연결된 것은 아니다.

 

onCreate 함수 안에 아래와 같이 각각의 버튼을 꺼내서 위에서 만든 'buttonNumberListener'을 연결한다.

전체 코드

 

Button buttonClear = findViewById(R.id.am_buttonClear);
buttonClear.setOnClickListener(buttonNumberListener);

Button buttonCurlyBrackets = findViewById(R.id.am_buttonCurlyBrackets);
buttonCurlyBrackets.setOnClickListener(buttonNumberListener);

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button.OnClickListener buttonNumberListener = new Button.OnClickListener() {
        @Override
        public void onClick(View view) {
        int id = view.getId();

        switch (id) {
            case R.id.am_button0: {
	            break;
            }
            case R.id.am_button1: {
	            break;
            }
            case R.id.am_button2: {
	            break;
            }
            case R.id.am_button3: {
	            break;
            }
            case R.id.am_button4: {
	            break;
            }
            case R.id.am_button5: {
	            break;
            }
            case R.id.am_button6: {
	            break;
            }
            case R.id.am_button7: {
	            break;
            }
            case R.id.am_button8: {
	            break;
            }
            case R.id.am_button9: {
	            break;
            }
            case R.id.am_buttonClear: {
	            break;
            }
            case R.id.am_buttonCurlyBrackets: {
	            break;
            }
            case R.id.am_buttonPercentage: {
	            break;
            }
            case R.id.am_buttonDevide: {
	            break;
            }
            case R.id.am_buttonMultiple: {
	            break;
            }
            case R.id.am_buttonMinus: {
	            break;
            }
            case R.id.am_buttonPlus: {
	            break;
            }
            case R.id.am_buttonPositiveNegativeNumber: {
	            break;
            }
            case R.id.am_buttonPoint: {
	            break;
            }
            case R.id.am_buttonEqual: {
	            break;
            }
        }

    }
};

 

 

//C, 0, %, /
Button buttonClear = findViewById(R.id.am_buttonClear);
buttonClear.setOnClickListener(buttonNumberListener);

Button buttonCurlyBrackets = findViewById(R.id.am_buttonCurlyBrackets);
buttonCurlyBrackets.setOnClickListener(buttonNumberListener);

Button buttonPercentage = findViewById(R.id.am_buttonPercentage);
buttonPercentage.setOnClickListener(buttonNumberListener);

Button buttonDevide = findViewById(R.id.am_buttonDevide);
buttonDevide.setOnClickListener(buttonNumberListener);

// 7, 8, 9, *
Button button7 = findViewById(R.id.am_button7);
button7.setOnClickListener(buttonNumberListener);

Button button8 = findViewById(R.id.am_button8);
button8.setOnClickListener(buttonNumberListener);

Button button9 = findViewById(R.id.am_button9);
button9.setOnClickListener(buttonNumberListener);

Button buttonMultiple = findViewById(R.id.am_buttonMultiple);
buttonMultiple.setOnClickListener(buttonNumberListener);

// 4, 5, 6, -
Button button4 = findViewById(R.id.am_button4);
button4.setOnClickListener(buttonNumberListener);

Button button5 = findViewById(R.id.am_button5);
button5.setOnClickListener(buttonNumberListener);

Button button6 = findViewById(R.id.am_button6);
button6.setOnClickListener(buttonNumberListener);

Button buttonMinus = findViewById(R.id.am_buttonMinus);
buttonMinus.setOnClickListener(buttonNumberListener);

// 1, 2, 3, +
Button button1 = findViewById(R.id.am_button1);
button1.setOnClickListener(buttonNumberListener);

Button button2 = findViewById(R.id.am_button2);
button2.setOnClickListener(buttonNumberListener);

Button button3 = findViewById(R.id.am_button3);
button3.setOnClickListener(buttonNumberListener);

Button buttonPlus = findViewById(R.id.am_buttonPlus);
buttonPlus.setOnClickListener(buttonNumberListener);

// +/-, 0, ., =
Button buttonNegativePositive = findViewById(R.id.am_buttonPositiveNegativeNumber);
buttonNegativePositive.setOnClickListener(buttonNumberListener);

Button button0 = findViewById(R.id.am_button0);
button0.setOnClickListener(buttonNumberListener);

Button buttonPoint = findViewById(R.id.am_buttonPoint);
buttonPoint.setOnClickListener(buttonNumberListener);

Button buttonEqual = findViewById(R.id.am_buttonEqual);
buttonEqual.setOnClickListener(buttonNumberListener);

 

2. 확인하기

 

Toast를 사용하여 Button이 눌린 것을 확인 한다.

아래와 같이 am_button0 아래에 코드를 넣는다.

 
Toast.makeText(MainActivity.this, "Button0", Toast.LENGTH_LONG).show();
 
case R.id.am_button0: {
    Toast.makeText(MainActivity.this, "Button0", Toast.LENGTH_LONG).show();
    break;
}
 

핸드폰이 연결된 상태에서 앱을 실행한다.

 

 

 

핸드폰에서 실행 후 '0'이 표시된 버튼을 누른다.

 

 

 

'Button0' 이 표시된다.

 

다음 편에는 버튼을 실행하여 화면에 표시되는 기능이 추가된다.

 

 

 

반응형