[계산기 만들기] 버튼 이벤트를 처리하는 4가지 방법
2019. 3. 16. 19:52
1. 익명 클래스 생성 후 이벤트 리스너 사용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | public class MainActivity extends AppCompatActivity { private TextView textView; private Button buttonP, buttonM, buttonG, buttonN; private EditText one, two; @Override protected void onCreate (Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = findViewById(R.id.textView); one = findViewById(R.id.one); two = findViewById(R.id.two); buttonP = (Button) findViewById(R.id.buttonP); buttonP.setOnClickListener(new Button.onClickListener() { @Override public void onClick(View view) { int n1 = Integer.parseInt(one.getText().toString()); int n2 = Integer.parseInt(two.getText().toString()); textView.setText(Integer.toString(n1 + n2)); } }); buttonM = (Button) findViewById(R.id.buttonM); buttonM.setOnClickListener(new Button.onClickListener() { @Override public void onClick(View view) { int n1 = Integer.parseInt(one.getText().toString()); int n2 = Integer.parseInt(two.getText().toString()); textView.setText(Integer.toString(n1 - n2)); } }); buttonG = (Button) findViewById(R.id.buttonG); buttonG.setOnClickListener(new Button.onClickListener() { @Override public void onClick(View view) { int n1 = Integer.parseInt(one.getText().toString()); int n2 = Integer.parseInt(two.getText().toString()); textView.setText(Integer.toString(n1 * n2)); } }); buttonN = (Button) findViewById(R.id.buttonN); buttonN.setOnClickListener(new Button.onClickListener() { @Override public void onClick(View view) { int n1 = Integer.parseInt(one.getText().toString()); int n2 = Integer.parseInt(two.getText().toString()); textView.setText(Integer.toString(n1 / n2)); } }); } } // 버튼의 개수가 적거나, 버튼들 간의 연관성이 적은 경우 // 이벤트 핸들러 함수 내에서 익명 클래스 외부의 변수를 참조하지 않는 경우 // 간단한 Button 클릭 이벤트 테스트 코드를 작성하는 경우 | cs |
2. 생성해 놓은 익명 클래스 참조를 이벤트 리스너로 사용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | public class MainActivity extends AppCompatActivity { private TextView textView; private Button buttonP, buttonM, buttonG, buttonN; private EditText one, two; @Override protected void onCreate (Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button.onClickListener onClickListener = new Button.OnClickListener() { @Override public void onClick(View view) { textView = (TextView) findViewById(R.id.textView); one = (EditText) findViewById(R.id.one); two = (EditText) findViewById(R.id.two); switch (view.getId()) { case R.id.buttonP : int n1 = Integer.parseInt(one.getText().toString()); int n2 = Integer.parseInt(two.getText().toString()); textView.setText(Integer.toString(n1 + n2)); break; case R.id.buttonM : int n3 = Integer.parseInt(one.getText().toString()); int n4 = Integer.parseInt(two.getText().toString()); textView.setText(Integer.toString(n1 - n2)); break; case R.id.buttonP : int n5 = Integer.parseInt(one.getText().toString()); int n6 = Integer.parseInt(two.getText().toString()); textView.setText(Integer.toString(n1 * n2)); break; case R.id.buttonN : int n7 = Integer.parseInt(one.getText().toString()); int n8 = Integer.parseInt(two.getText().toString()); textView.setText(Integer.toString(n1 / n2)); break; } } }; buttonP = (Button)findViewById(R.id.buttonP); buttonP.setOnClickListener(onClickListener); buttonM = (Button)findViewById(R.id.buttonM); buttonM.setOnClickListener(onClickListener); buttonG = (Button)findViewById(R.id.buttonG); buttonG.setOnClickListener(onClickListener); buttonN = (Button)findViewById(R.id.buttonN); buttonN.setOnClickListener(onClickListener); } } // 버튼이 여러 개 존재하고 버튼들 간의 연관성이 많은 경우 // 이벤트 핸들러 함수 내에서 익명 클래스 외부의 변수를 참조하지 않는 경우 // 추후 또 다른 버튼을 추가하여 사용할 가능성이 높은 경우 | cs |
3. 이벤트 리스너 인터페이스를 implements하는 이벤트 리스너 클래스 생성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | public class MainActivity extends AppCompatActivity { private TextView textView; private Button buttonP, buttonM, buttonG, buttonN; private EditText one, two; class BtnOnClickListener implements Button.OnClickListener { @Override public void onClick(View view) { textView = findViewById(R.id.textView); one = findViewById(R.id.one); two = findViewById(R.id.two); switch (view.getId()) { case R.id.buttonP : int n1 = Integer.parseInt(one.getText().toString()); int n2 = Integer.parseInt(two.getText().toString()); textView.setText(Integer.toString(n1 + n2)); break; case R.id.buttonM : int n3 = Integer.parseInt(one.getText().toString()); int n4 = Integer.parseInt(two.getText().toString()); textView.setText(Integer.toString(n1 - n2)); break; case R.id.buttonP : int n5 = Integer.parseInt(one.getText().toString()); int n6 = Integer.parseInt(two.getText().toString()); textView.setText(Integer.toString(n1 * n2)); break; case R.id.buttonN : int n7 = Integer.parseInt(one.getText().toString()); int n8 = Integer.parseInt(two.getText().toString()); textView.setText(Integer.toString(n1 / n2)); break; } } } @Override protected void onCreate (Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); BtnOnClickListener onClickListener = new BtnOnClickListener(); buttonP = findViewById(R.id.buttonP); buttonP.setOnClickListener(onClickListener); buttonM = findViewById(R.id.buttonM); buttonM.setOnClickListener(onClickListener); buttonG = findViewById(R.id.buttonG); buttonG.setOnClickListener(onClickListener); buttonN = findViewById(R.id.buttonN); buttonN.setOnClickListener(onClickListener); } } // 명시적으로 이벤트 리스너 인터페이스를 상속하여 만듦으로 코드의 가독성을 높이고 싶은 경우 // 추후 또 다른 버튼을 추가하여 사용할 가능성이 높은 경우 | cs |
4. Activity에서 이벤트 리스너를 implements해서 사용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | package com.example.soyoung.widget; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private TextView textView; private Button buttonP, buttonM, buttonG, buttonN; private EditText one, two; @Override protected void onCreate (Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = findViewById(R.id.textView); buttonP = findViewById(R.id.buttonP); buttonP.setOnClickListener(this); buttonM = findViewById(R.id.buttonM); buttonM.setOnClickListener(this); buttonG = findViewById(R.id.buttonG); buttonG.setOnClickListener(this); buttonN = findViewById(R.id.buttonN); buttonN.setOnClickListener(this); one = findViewById(R.id.one); two = findViewById(R.id.two); } @Override public void onClick(View view) { int n1, n2; if (view.getId() == R.id.buttonP) { n1 = Integer.parseInt(one.getText().toString()); n2 = Integer.parseInt(two.getText().toString()); textView.setText(Integer.toString(n1 + n2)); } if (view.getId() == R.id.buttonM) { n1 = Integer.parseInt(one.getText().toString()); n2 = Integer.parseInt(two.getText().toString()); textView.setText(Integer.toString(n1 - n2)); } if (view.getId() == R.id.buttonG) { n1 = Integer.parseInt(one.getText().toString()); n2 = Integer.parseInt(two.getText().toString()); textView.setText(Integer.toString(n1 * n2)); } if (view.getId() == R.id.buttonN) { n1 = Integer.parseInt(one.getText().toString()); n2 = Integer.parseInt(two.getText().toString()); textView.setText(Integer.toString(n1 / n2)); } } } // 이벤트 핸들러 함수에서 많은 수의 Activity 멤버를 액세스해야 하는 경우 // Activity 내부의 버튼들에 한 클릭 이벤트를 한 곳에서 처리하고 싶은 경우 // 익명 클래스 또는 별도의 이벤트 리스너를 만들고 싶지 않은 경우 | cs |
'STUDY > Android' 카테고리의 다른 글
[메모장 앱 만들기] (0) | 2019.04.08 |
---|---|
버튼 누르면 사진 파일 불러오는 앱 만들기 (0) | 2019.03.29 |
Android Studio 수업 정리 1 (2) | 2019.03.28 |
안드로이드 스튜디오 람다식 안 먹힐 때 (0) | 2019.03.25 |
[과제 / 회원가입 화면 만들기] EditText, RadioButton, CheckBox (0) | 2019.03.21 |