본문 바로가기

ANDROID - JAVA

[ANDROID - JAVA] 여러개의 버튼 각각 다른 이벤트 주기

안드로이드에서는 한 Activity마다 다양한 버튼이 존재하고 그 버튼마다 다른 기능을 수행하여야 하는 경우가 매우 많다.

그래서 오늘의 메모는


오늘은 각각의 버튼을 클릭해서 토스트 메시지를 띄우는법을 만들기 예제를 만들기!


생각한 방법은 3가지

1. 버튼에 OnClickListner를 선언 할 때 각각의 버튼에 다른 기능을 부여한다.

2. 액티비티 자체에 OnClickListner를 impliment 해주고 조건문을 통해 처리한다.

   2-1: if else

   2-2: switch


다른 효율적인 방법이 있다면 알려주세요!


 

필요 조건:


1. activity에 main_button1, main_button1라는 id를 가진 버튼을 2개 생성



방법:

1. 버튼에 OnclickListner를 선언 할 때 각각의 버튼에 다른 기능을 부여한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class MainActivity extends AppCompatActivity {
    Button button1;
    Button button2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button1 = findViewById(R.id.main_button1);
        button2 = findViewById(R.id.main_button2);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this"버튼 1을 클릭하였습니다.", Toast.LENGTH_LONG).show();
            }
        });
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this"버튼 2을 클릭하였습니다.", Toast.LENGTH_LONG).show();
            }
        });
    }

}
cs


설명:

각각의 버튼에 OnClickListener를 선언 해줄 때 (줄10, 16) 각각의 버튼에 새로운 기능을 부여해준다.


단점:

각각의 버튼에 새로운 OnClickListener마다 계속 기능을 지정해주면 너무 코드가 복잡...






2-1. 액티비티 자체에 OnclickListner를 impliment 해주고 조건문을 통해 처리한다.(if else)



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
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
 
    Button button1;
    Button button2;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        button1 = findViewById(R.id.main_button1);
        button2 = findViewById(R.id.main_button2);
 
        button1.setOnClickListener(this);
        button2.setOnClickListener(this);
 
    }
 
    @Override
    public void onClick(View view) {
        if (view.getId() == R.id.main_button1) {
                Toast.makeText(MainActivity.this"버튼 1을 클릭하였습니다.", Toast.LENGTH_LONG).show();
        } else if (view.getId() == R.id.main_button2) {
                Toast.makeText(MainActivity.this"버튼 2을 클릭하였습니다.", Toast.LENGTH_LONG).show();
        } else {
            //??
        }
    }
}
cs



설명:

MainActivity에 View.OnClickListener를 Impliment를 해준 후 각각의 버튼에 OnclickListener를 선언 (줄14, 15)

MainActivity에 Override를 해준 후 (줄 19) 클릭된 view가 뭔지 파악 후 (줄 20에 View view 라고 되어진 부분) 

If else 에서 view의 id를 파악해서 각각의 조건을 파악한 후 기능을 부여한다.


단점:

if else를 길게 나열하다 보니까 Id를 파악하기 힘듬



2-1. 액티비티 자체에 OnclickListner를 impliment 해주고 조건문을 통해 처리한다.(switch)



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
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
 
    Button button1;
    Button button1;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        button1 = findViewById(R.id.main_button1);
        button2 = findViewById(R.id.main_button2);
 
        button1.setOnClickListener(this);
        button2.setOnClickListener(this);
    }
 
    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.main_button1:
                Toast.makeText(MainActivity.this"버튼 1을 클릭하였습니다.", Toast.LENGTH_LONG).show();
                break;
 
            case R.id.main_button2:
                Toast.makeText(MainActivity.this"버튼 2을 클릭하였습니다.", Toast.LENGTH_LONG).show();
                break;
 
            default:
                break;
        }
    }
}

cs



설명:

If else와 모든곳이 같지만 If else가 아닌 switch를 통해 처리해줌 (줄20)

개인적으로 이 방법이 가장 보기도 좋고 정리도 하기 좋다고 생각되어서 이 방법을 사용함