안녕하세요. PEACE-입니다.
안드로이드 스터디 [열 세번째]글입니다.
오늘은 안드로이드 스피너(Spinner)와 선택 이벤트 리스너를 다루는 방법에 간단히 대해 소개하겠습니다.
1. 스피너란?
안드로이드에서 스피너는 핵심 기능으로 사용되기 보다는 사용자 UI로써 일련의 작업 과정에 속하는 일이 많습니다. 예를들면 회원가입 시 생년월일이나 지역을 선택하는 과정에서 쓰입니다. 아래 그림은 스피너 쓰임의 예를 보여줍니다.
[그림 1] 회원 가입 시 스피너의 사용 예
2. 스피너 생성
스피너의 생성 시 사용되는 네임은 Spinner입니다.
in activity_main.xml
<Spinner
android:id="@+id/spinner"
android:layout_width="368dp"
android:layout_height="wrap_content"
app:layout_constraintLeft_toRightOf="parent" />
3. ArrayAdapter 사용
기본적으로 ArrayAdapter는 현재 Context(1)와 사용할 LayoutResource(2), Array(or ArrayList)(3)를 받아 스피너를 만들어줍니다. ArrayAdapter 객체를 생성하는 방법은 아래와 같다.
[그림 2] ArrayAdapter 객체 생성 방법
다음으로는 Spinner Wizet의 ID를 참조시킨 Spinner객체에 Adapter를 세팅한다.
[그림 3] Spinner 객체에 ArrayAdapter 세팅하는 과정
위와 같이 위젯을 만들고 Spinner객체 생성 후 ArrayAdapter를 적용하면 아래 그림과 같이 기능한다.
[그림 4] Spinner 객체에 ArrayAdapter 세팅 후 구현된 기능
4. Event Listener 등록
/**생략..
* in MainActivity.class*/
//event listener
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(MainActivity.this,"선택된 아이템 : "+spinner.getItemAtPosition(position),Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
/**..생략*/
[그림 5] Spinner 객체에 Event Listener를 등록해 구현한 기능
5. 전체 소스 코드

MainActivity.class
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;
import java.util.ArrayList;
/**
* 스피너 사용법과 이벤트 리스너 처리
* */
public class MainActivity extends AppCompatActivity{
private Spinner spinner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//id refernece for wizet
spinner = (Spinner)findViewById(R.id.spinner);
//input array data
final ArrayList<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("4");
list.add("5");
String[] list2 = new String[2];
list2[0] = "안녕";
list2[1] = "하세요";
//using ArrayAdapter
ArrayAdapter spinnerAdapter;
spinnerAdapter = new ArrayAdapter(this, R.layout.support_simple_spinner_dropdown_item, list2);
spinner.setAdapter(spinnerAdapter);
//event listener
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(MainActivity.this,"선택된 아이템 : "+spinner.getItemAtPosition(position),Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
}

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="peace.study1.MainActivity">
<Spinner
android:id="@+id/spinner"
android:layout_width="368dp"
android:layout_height="wrap_content"
app:layout_constraintLeft_toRightOf="parent" />
</android.support.constraint.ConstraintLayout>

