[안드로이드 스피너] 어레이어댑터를 이용한 스피너 구현 및 이벤트 리스너. Android spinner and event listener example using arrayadater.

2018. 9. 10. 18:19 안드로이드/뷰(View)

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 객체를 생성하는 방법은 아래와 같다.



[그림 2ArrayAdapter 객체 생성 방법


다음으로는 Spinner Wizet의 ID를 참조시킨 Spinner객체에 Adapter를 세팅한다. 


[그림 3] Spinner 객체에 ArrayAdapter 세팅하는 과정


위와 같이 위젯을 만들고 Spinner객체 생성 후 ArrayAdapter를 적용하면 아래 그림과 같이 기능한다.


[그림 4] Spinner 객체에 ArrayAdapter 세팅 후 구현된 기능




4. Event Listener 등록


 Spinner에서도 역시 Button과 같은 다른 위젯에서 이벤트 리스너를 사용하는 방법과 같다. 이벤트 리스너를 등록하는 방법은 3가지가 있는데 예제에서는 간단하게 구현하기 위해 리스너를 확장하지 않고 일회적으로 리스너 객체를 생성하는 방법을 이용했다.

  *사용한 리스너 객체 : OnItemSelectedListener
  *구현 방법 : OnItemSelectedListener를이용해 선택된 Item의 position값(0부터 시작..)을 가져와 Spinner객체의 getItemAtPosition()
메서드를 사용해 해당 포지션에 세팅된 내용을 얻어냈다.
  *구현 내용 : 스피너의 아이템 클릭시 "선택된 아이템 : 1"과 같이 문구와 같이 선택된 아이템이 출력된다.
/**생략..
* 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) {

}
});
}
}

 activity_main.xml

<?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>

출처 : http://mailmail.tistory.com/16