Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- LG유플러스
- Example
- push
- afterdelay
- error
- Check
- swift3
- simulator
- 아이폰7
- 포켓볼
- Bitcode
- loop
- setting
- 공략
- UITableView
- 얻는법
- 샘플
- IOS
- Xcode
- 신도림
- GCD
- swift
- 신도림 테크노마트
- 페이백
- UIView
- 해몽
- 보라카이
- 포켓몬 GO
- 스마트폰
- 앱스토어
Archives
- Today
- Total
도래울
[Android] 많은 버튼의 클릭이벤트 처리 : button onClick() : OnClickListener 본문
예전에 한번 버튼의 클릭이벤트에 대해서 고찰한적이 있었습니다.
onClick()의 구현이 더 좋을까, OnClickListener 객체를 각각 생성해서 구현하는 것이 좋을까에 대한 내용이었습니다.
어쨋든 전 결론을 onClick()의 구현(implements)으로 내렸었죠.
( 버튼 클릭 이벤트 처리에 관한 고찰 : http://croute.me/326 )
이번에는 저번과는 조금 다른 고찰입니다.
수많은 버튼을 사용해야 하는 경우,
하나씩 아이디를 onClick()에서 siwtch 문 안에 case로 정의내려 처리하기는 너무 곤욕이죠. 휴...
그래서 이런 방법을 생각해 보았습니다.
향상된 for문과 배열을 이용하는 방법.
Enhanced For Loop(주의깊게 향상된 반복문) 보기
코드는 아래와 같습니다.
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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | package me.croute.manybutton; import java.util.ArrayList; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; /** * 많은 버튼이 있을 때 클릭이벤트를 처리하기 위한 예제 코드 * * * @author croute * @since 2011.04.19 */ public class ManyButtonExampleActivity extends Activity implements OnClickListener { // 여러개의 버튼을 배열로 처리하기 위해 버튼에 대해 배열 선언을 함 private Button[] mButton = new Button[ 6 ]; // 각각 다르게 출력할 스트링을 넣어둘 리스트 private ArrayList<String> mDataList; @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.main); mDataList = new ArrayList<String>(); mButton[ 0 ] = (Button) findViewById(R.id.main_b_00); mButton[ 1 ] = (Button) findViewById(R.id.main_b_01); mButton[ 2 ] = (Button) findViewById(R.id.main_b_02); mButton[ 3 ] = (Button) findViewById(R.id.main_b_03); mButton[ 4 ] = (Button) findViewById(R.id.main_b_04); mButton[ 5 ] = (Button) findViewById(R.id.main_b_05); // 버튼들에 대한 클릭리스너 등록 및 각 버튼이 클릭되었을 때 출력될 메시지 생성(리스트) for ( int i = 0 ; i < 6 ; i++) { // 버튼의 포지션(배열에서의 index)를 태그로 저장 mButton[i].setTag(i); // 클릭 리스너 등록 mButton[i].setOnClickListener( this ); // 출력할 데이터 생성 mDataList.add( "하이" + i + "입니다" ); } } /* (non-Javadoc) * @see android.view.View.OnClickListener#onClick(android.view.View) */ @Override public void onClick(View v) { // 클릭된 뷰를 버튼으로 받아옴 Button newButton = (Button) v; // 향상된 for문을 사용, 클릭된 버튼을 찾아냄 for (Button tempButton : mButton) { // 클릭된 버튼을 찾았으면 if (tempButton == newButton) { // 위에서 저장한 버튼의 포지션을 태그로 가져옴 int position = (Integer)v.getTag(); // 태그로 가져온 포지션을 이용해 리스트에서 출력할 데이터를 꺼내서 토스트 메시지 출력 Toast.makeText( this , mDataList.get(position), Toast.LENGTH_SHORT).show(); } } } } |
각각의 버튼을 눌렀을 때 만들어 두었던 데이터대로 잘 출력이 되는군요.
아래는 위 예제에 대한 프로젝트 압출파일 입니다.
소스 첨부
'개발 > Android' 카테고리의 다른 글
SMS에 반응하는 프로그램(안드로이드) (0) | 2016.02.05 |
---|---|
Android Intent 와 Intent filter (0) | 2016.02.05 |
안드로이드 Inflate LayoutInflater에 관한 고찰 (0) | 2016.02.05 |
안드로이드 위젯에서 Activity 호출하기 (0) | 2016.02.05 |
Activity State Stubs (0) | 2016.02.05 |
Comments