[위미르 개발팀] Android, iOS , Web 제작
[안드로이드 레이아웃]버튼 클릭 처리 본문
모든 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
'개발자료 > Android' 카테고리의 다른 글
[안드로이드 컴포넌트]액티비티와 프래그먼트간의 소통 (1) | 2017.09.23 |
---|---|
[안드로이드 레이아웃]Fragment 사용하기 (2) | 2017.09.22 |
[안드로이드 레이아웃]Custom Dialog 사용하기 (0) | 2017.09.20 |
[안드로이드 개발환경 설정]Gradle 사용법 (0) | 2017.09.15 |
[안드로이드 레이아웃]background와 src의 차이 (0) | 2017.09.14 |