«   2024/12   »
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
Archives
Today
Total
관리 메뉴

[위미르 개발팀] Android, iOS , Web 제작

[안드로이드 레이아웃]버튼 클릭 처리 본문

개발자료/Android

[안드로이드 레이아웃]버튼 클릭 처리

위미르개발팀 2017. 9. 21. 11:11

모든 GUI OS에서는 버튼이라는것이 존재하는데, 이 버튼은 기본적으로 눌렀을때 반응을 해야 합니다.


하지만, xml에서 버튼을 배치만하고 실행 할경우 그 버튼을 눌러도 누른 이벤트에 대한 처리코드가 없기때문에 아무런 일이 일어나지 않을 것입니다.


OS에서 클릭이나 드래그 등등 사용자의 행동이 있을경우 이것을 이벤트라고 합니다.


이 이벤트에 대한 처리를 해주는것이 이벤트 리스너 입니다.


안드로이드에는 터치 리스너, 롱터치 리스너, 클릭 리스너 등등 행동/뷰 별로 이벤트가 존재합니다.


버튼에는 주로 클릭 리스너를 사용합니다.


버튼 클릭 리스너에는 두가지 설정법이 존재합니다.


먼저 버튼마다 리스너를 따로 넣어주는 방법입니다.


1
2
3
4
5
6
bt1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //할일
            }
        });
cs


bt1이라는 버튼객체에 setOnClickListener로 안에 새로운 리스너를 만들어서 넣어주고 있습니다.


두번째로는 View.OnClickListener 인터페이스를 클래스에 implment 해서 사용하는법입니다.



자바에서 인터페이스를 사용할때 인터페이스의 메소드를 정의 하지않으면 이러한 에러가 납니다.


1
2
3
4
5
6
7
@Override
public void onClick(View v){
      switch (v.getId()){
         case R.id.bt1:
            break;
        }
}
cs


인터페이스의 메소드를 오버라이드 해주었습니다.


이제 이렇게 했다고해서 바로 연결되는것이 아닙니다.


onCreate에서 리스너를 등록해주어야합니다.


전체 소스입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    Button bt1;
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bt1 = (Button) findViewById(R.id.bt1);
        bt1.setOnClickListener(this);
    }
 
    @Override
    public void onClick(View v){
        switch (v.getId()){
            case R.id.bt1:
                break;
        }
    }
 
}
 
cs


버튼에 직접 리스너를 정의해주는방식과 인터페이스를 이용한 방법둘다 장단점은 존재합니다.


물론 성능과 관계된것은 아니라 코드의 가독성이 차이가 납니다.


리스너가 달릴 뷰의 갯수가 적다면 직접 넣어주는것이 더 편하고 굳이 onClick을 찾을 필요가 없지만, 만약 처리 해야할 뷰가 많다면 저렇게 한군데에 모아서 뷰의 id로 관리하는것이 더 보기 좋고 편합니다.


그리고 버튼은 기본적으로 안드로이드에서 누르는 시각적 효과가 들어간 레이아웃인것이지 버튼만 버튼의 기능을 수행할수 있는것이 아니라, 텍스트뷰든 이미지뷰든 모두 클릭 리스너를 달고 버튼처럼 꾸며주면 버튼으로서 역할을 수행할수 있습니다.




희 위미르에서는 모바일 어플리케이션(Android/iOS), Web 개발을 해드리고 있습니다.


문의 전화 : 070-4177-3962


Comments