안녕하세요 골드입니다.
오늘은 Spinner 위젯을 사용하여 아이템 리스트를 만들어 보도록 하겠습니다.
안드로이드에서 Spinner라고 불리는 view는
Drop down menu 라고도 불립니다.
클릭하면 버튼 아래로 목록이 나타나고 그 중 하나를 클릭하면
어떠한 이벤트가 발생하도록 도와줍니다.
1. activity_main에 Spinner 코드 생성하기
먼저 xml 파일에 Spinner 태그를 작성하겠습니다.
Spinner 리스트 아이템을 클릭했을때, 클릭한 값을 보여주기 위한 TextView도 함께 작성하겠습니다.
전체를 LinearLayout으로 감싸고 Orientation은 Vertical로 해서 뷰들을 수직으로 정렬하였습니다.
먼저 TextView를 하나 만들고 그 다음 Spinner를 만들었습니다.
안드로이드에 굉장한 장점입니다.
Spinner라는 view는 이미 만들어져 있고
우리는 사용하기만 하면 된다는 점입니다.
하나하나 만든다고 생각하면 코드가 저렇게 간단하진 않을 것입니다.
아직 값이 없어서 어색해보입니다.
2. MainActivity에 코드 작성하기
Spinner는 일반적인 TextView같은 위젯과 다른 점이 있습니다.
바로, 데이터를 어댑터라는 곳에 설정한다는 점입니다.
그림으로 보면 이런식입니다. 중간에 Adapter라는 녀석을 선언해줘야 합니다.
각각의 아이템이 화면에 나타나기 전에 getView()라는 메서드가 호출됩니다.
getView()에서 리턴하는 뷰가 하나의 아이템으로 화면에 나타나게 됩니다.
그럼 이제 변수를 선언하겠습니다.
TextView를 참조하기 위한 textView. 리스트에 나타낼 배열. items 입니다.
간단하게 몇 가지 적어보았습니다. 어떤 의도는 없습니다.
보통 Spinner를 사용할 땐
String[] 배열이나 int[] 배열을 많이 사용하는 것으로 보입니다.
onCreate 안에 textView와 spinner를 참조하고 Adapter를 생성합니다.
제공되는 ArrayAdapter를 사용하겠습니다.
데이터 소스가 배열인 경우에 이 어댑터를 사용합니다. 기본적으로 ArrayAdapter가 각 배열 항목에서 toString()을 호출하고 그 콘텐츠를 TextView에 배치함으로써 각 항목에 대한 뷰를 생성합니다.
출처 : https://developer.android.com/guide/topics/ui/declaring-layout?hl=ko#java
items를 String으로 선언했기 때문에 <String>이라고 선언합니다.
첫 번째 매개변수는 Context 객체로 앱의 정보를 담고 있는 객체입니다.
여기서 this는 MainActivity를 의미합니다.
두 번째 매개변수는 layout id입니다. 기본으로 제공되는 simple_spinner_item을 사용하겠습니다.
마지막으로 우리가 작성한 배열을 집어넣습니다.
다음은 spinner를 눌렀을 때 나오는 list에 대한 Resource 선언입니다.
기본 제공되는 layout을 사용합니다.
이제 spinner에 adapter를 set해줍니다.
다음은 spinner 리스트에 있는 각 아이템을 클릭했을 때, textView의 text를 바꾸는 기능을 구현하겠습니다.
. 연산자를 활용하여 setOnItemSelectedListener를 구현합니다.
필수로 구현해줘야 하는 두 메서드가 있습니다.
이름만 보고도 어떤 기능을 가진 메서드인지 알 수 있습니다.
onItemSelected메서드의
첫 번째 매개변수는 선택한 AdapterView 객체를 말하는데 우리가 만든 adapter를 가리키게 됩니다.
두 번째 매개변수는 선택한 view 객체를 말합니다.
세 밴째 매개변수는 선택한 view의 index 값을 말하고,
네 번째는 id 값을 말합니다.
onItemSelected 메서드 안에 textView.setText를 구현해서 우리가 선택한 item의 text값을 불러옵니다.
3. MainActivity 전체 코드
이제 가상머신으로 실행해보겠습니다.
가상머신으로 실행한 앱에서 Spinner를 누르고 목록에 있는 아이템을 클릭하면
위에 있는 Text가 바뀔 것입니다.
Spinner가 정상적으로 작동하고, 배열이 잘 들어가있습니다.
아이템을 하나 선택하면 TextView가 변하는 것을 볼 수 있습니다.
여기까지 골드였습니다.
감사합니다.
참고자료 : Do it! 안드로이드 프로그래밍