[안드로이드 기초 ] 스피너 (Spinner)
안드로이드 스피너 (Spinner) |
● Spinner 객체는 선택할 수 있는 상자를 화면에 출력하고 그 상자를 클릭하면 목록이 나타나는 형태인데요. 안드로이드에서는 목록을 나타나게 할 때 "Adapter"라는 객체를 이용합니다. 이것은 행 레이아웃과 여기에 매핑할 테이터를 정의하는 기능을 합니다. 예제를 하나 만들어가면서 어떻게 적용이 되는지 살펴보도록 할게요.
● 먼저 상속관계를 살펴보도록 하겠습니다.
● 간단한 프로젝트를 하나 만들겠습니다. 이 프로젝느는 main.xml에 Spinner 세개를 배치하고 ,그 목록을 선택했을때 텍스트 뷰에 내용을 조합해서 출력하도록 하겠습니다.
● 스피너 세개와 텍스트뷰 두개를 배치하고 위와같이 설정하였습니다. xml파일을 살펴보도록 하겠습니다.
● android:prompt속성으로 선택 목록의 제목을 출력하는 문자열 객체를 정의하고 이 문자열 객체는 values/Strings.xml에서 재정의 합니다.
● 이 프로젝트에는 위와같이 여러개의 xml파일이 필요합니다. 1번은 화면을 출력하는 레이아웃이고, 2번은 세번째의 Spinner 행 레이아웃을 재정의한 파일입니다. 그리고 3번은 출력할 목록 데이터들이고, 4번에서는 목록의 제목을 추가로 정의합니다. 하나씩 살펴보도록 하겠습니다.
● 먼저 String.xml파일을 살펴보겠습니다.
● 다음으로 values폴더에 arrays.xml팔일을 만들어서 다음과 같이 작성합니다.
● 다음은 사용자 정의 행 레이아웃인 Spinner_item.xml파일입니다. 이 레이아웃은 상영회차 목록을 출력할때 사용할 것입니다.
● 이제 매인 액티비티 파일에서 랭 레이아웃과 목록 테이터들을 매핑하여 출력하는 구문을 작성하고 Spinner에 대한 클릭 이벤트도 적성하겠습니다.
● 스피너를 매핑하여 출력하는 기본 구문입니다. arrays.xml파일에서 정의했던 "spinnerArray1" 배열 객체를 리소스에서 찾아 자바 배열 객체로 호출하고 현재 콘텐스트에 Arrayadapter 객체를 생성하는데, 행 레이아웃은 안드로이드 API에서 제공하는 simple_spinner_item을 사용하고 매핑할 데이터는 위에서 만든 배열 객체를 사용합니다. 세번째 스피너는 행 레이아웃으로 위에서 만든 spinner_item.xml을 사용합니다.
● 다음으로 세개의 스피너 목록에서 사용자가 선택했을 때 실행하는 이벤트 리스너를 onCreate()메서드에 작성합니다.
● 위 소스를 보면 OnItemSelectedListener()클래스를 사용할 때는 onItemSelected()메서드와 onNothingSelected()메서드를 필수적으로 정의해야 합니다. onNothingSelected()메서드는 특별한 명령이 없더라도 반드시 재정의 해야 합니다. 각 스피너들을 선택하면 선택 결과를 출력하는 printChecked()메서드를 실행하도록 정의하고 있습니다. 다음으로 위에서 호출했던 printChected()메서드를 정의 하겠습니다.
● 각각의 객체를 찾아서 출력할 선택 결과 문자열을 초기화 하고, 선택 결과값을 수집을 합니다. Spinner 목록에 출력하는 배열 데이터 중 첫번째 데이터를 선택하지 않은 상태에서 안내문을 출력하는 목적으로 첫번째 항목은 사용자가 선택하지 않았다고 판단을 합니다. 따라서 첫번째 데이터를 제외하고 나머지 데이터를 선택했을때만 선택한 데이터를 선택 결과 문자열에 대입을 하게 합니다.
● 다음으로 스피너를 매팅하는 기능을 하는 매서드를 정의하겠습니다.
● 이 메서드는 "아울 프레임웍"에서 추출해 온 메서드 입니다. 스피너의 행 레이아웃과 기본 값으로 설정할 수 있어 수정 폼에서 유용하게 도움 받을 수 있습니다.
● 다음으로 정의할 메서드도 "아울 프레임웍" 솔루션에서 추출해 온 Spinner 관련 메서드 입니다. 스피너를 찾거나 선택한 값을 찾아오는 원리를 보여주는 메서드입니다.
● 이제 AVD에서 실행을 해보겠습니다. 다음과 같이 선택목록이 나타나는데요.
● 영화 부분을 클릭하면 다음과 같이 스피너에도 선택항목이 나타나고 선택결과에 출력이 됩니다.