반응형

 

개요

스피너는 값 집합에서 하나의 값을 선택할 수 있는 빠른 방법을 제공합니다. 기본 상태의 스피너는 현재 선택된 값을 표시합니다. 스피너를 터치하면 기타 모든 사용 가능한 값을 포함하는 드롭다운 메뉴가 표시되며, 여기서 새 값을 선택할 수 있습니다.

Spinner 객체를 사용하여 레이아웃에 스피너를 추가할 수 있습니다. 이 작업은 일반적으로 XML 레이아웃에서 <Spinner> 요소를 사용하여 실행해야 합니다. 예:

 

<Spinner
    android:id="@+id/planets_spinner"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

 

선택 항목 목록으로 스피너를 채우려면 Activity 또는 Fragment 소스 코드에 SpinnerAdapter를 지정해야 합니다.

주요 클래스는 다음과 같습니다.

사용자 선택 항목으로 스피너 채우기

스피너에 제공하는 선택 항목은 어떠한 소스에서든 가져올 수 있지만, SpinnerAdapter를 통해 제공되어야 합니다. 예를 들어 선택 항목을 배열에서 사용할 수 있는 경우에는 ArrayAdapter, 선택 항목을 데이터베이스 쿼리에서 사용할 수 있는 경우에는 CursorAdapter를 통해 제공합니다.

예를 들어, 스피너에 사용할 수 있는 선택 항목이 사전 결정된 경우에는 문자열 리소스 파일에 정의된 문자열 배열을 사용하여 이러한 선택 항목을 제공할 수 있습니다.

 

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="planets_array">
        <item>Mercury</item>
        <item>Venus</item>
        <item>Earth</item>
        <item>Mars</item>
        <item>Jupiter</item>
        <item>Saturn</item>
        <item>Uranus</item>
        <item>Neptune</item>
    </string-array>
</resources>

이러한 배열과 함께 Activity 또는 Fragment에 다음 코드를 사용하여 ArrayAdapter의 인스턴스를 통해 스피너에 이러한 배열을 제공할 수 있습니다.

 

createFromResource() 메서드를 사용하면 문자열 배열에서 ArrayAdapter를 생성할 수 있습니다. 이 메서드의 세 번째 인수는 선택된 항목이 스피너 컨트롤에 나타나는 방식을 정의하는 레이아웃 리소스입니다. simple_spinner_item 레이아웃은 플랫폼에서 제공하며 스피너의 모양에 관해 자체적인 레이아웃을 직접 정의하고자 하지 않을 경우 사용해야 하는 기본 레이아웃입니다.

그런 다음, setDropDownViewResource(int)를 호출하여 어댑터가 스피너 선택 항목의 목록을 표시하는 데 사용해야 하는 레이아웃을 지정해야 합니다(simple_spinner_dropdown_item은 플랫폼에서 정의하는 또 다른 표준 레이아웃임).

setAdapter()를 호출하여 어댑터를 Spinner에 적용합니다.

 

사용자 선택에 응답

사용자가 드롭다운에서 항목을 선택하면 Spinner 객체가 항목 선택 시 이벤트를 수신합니다.

스피너에 관한 선택 이벤트 핸들러를 정의하려면 AdapterView.OnItemSelectedListener 인터페이스와 이에 상응하는 onItemSelected() 콜백 메서드를 구현합니다. 예를 들어, 다음은 Activity의 인터페이스 구현입니다.

public class SpinnerActivity extends Activity implements OnItemSelectedListener {
    ...

    public void onItemSelected(AdapterView<?> parent, View view,
            int pos, long id) {
        // An item was selected. You can retrieve the selected item using
        // parent.getItemAtPosition(pos)
    }

    public void onNothingSelected(AdapterView<?> parent) {
        // Another interface callback
    }
}

AdapterView.OnItemSelectedListener에는 onItemSelected() onNothingSelected() 콜백 메서드가 필요합니다.

그런 후 setOnItemSelectedListener()를 호출하여 인터페이스 구현을 지정해야 합니다.

 

Spinner spinner = (Spinner) findViewById(R.id.spinner);
spinner.setOnItemSelectedListener(this);

 

Activity 또는 Fragment를 사용하여 AdapterView.OnItemSelectedListener 인터페이스를 구현하는 경우(위의 예시 참조) this를 인터페이스 인스턴스로 전달하면 됩니다.

 

 

adapter나 리스너 구현이해가 어렵다면 다음 라이브러리와 같은 오픈소스를 사용하셔도 좋습니다.

github.com/arcadefire/nice-spinner

 

arcadefire/nice-spinner

A nice spinner for Android. Contribute to arcadefire/nice-spinner development by creating an account on GitHub.

github.com

 

참고: developer.android.com/guide/topics/ui/controls/spinner?hl=ko

 

반응형

+ Recent posts