selfstarter

Android Spinner 사용법 본문

App/Android

Android Spinner 사용법

selfstarter 2020. 7. 17. 00:32
  1. xml에서 spinner에 widget 생성
<Spinner
        android:id="@+id/bought_item_category_spinner"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        />
  1. spinner에 들어갈 객체 class 생성. key, value 쌍으로 Map처럼 데이터를 사용하기 위해 class를 만든다.
List<CommonSpinner> spinnerItems = new ArrayList<CommonSpinner>();
// TODO : 추가 수정이 가능함에 따라 SEQ가 변할 수 있음. SEQ를 따로 저장해야함
spinnerItems.add(new CommonSpinner(1000, "음료"));
spinnerItems.add(new CommonSpinner(1001, "건강식품"));
spinnerItems.add(new CommonSpinner(1002, "수입과자"));
spinnerItems.add(new CommonSpinner(1003, "과자"));
spinnerItems.add(new CommonSpinner(1004, "간식"));
spinnerItems.add(new CommonSpinner(1005, "채소"));
spinnerItems.add(new CommonSpinner(1006, "쌀"));
spinnerItems.add(new CommonSpinner(1007, "육류"));
spinnerItems.add(new CommonSpinner(1008, "닭고기"));
spinnerItems.add(new CommonSpinner(1009, "냉동식품"));
ArrayAdapter<CommonSpinner> categoryAdapter = new ArrayAdapter<CommonSpinner>(getContext(), android.R.layout.simple_spinner_item , spinnerItems);
categoryAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
itemCategorySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
        CommonSpinner spinnerItem = (CommonSpinner)adapterView.getItemAtPosition(i);
        Log.d(TAG, "key:"+spinnerItem.getKey());
    }

    @Override
    public void onNothingSelected(AdapterView<?> adapterView) {

    }
});

itemCategorySpinner.setAdapter(categoryAdapter);
public class CommonSpinner {
    private int key;       // key가 seq를 의미
    private String value;

    public CommonSpinner(int key, String value) {
        this.key = key;
        this.value = value;
    }

    public int getKey() {
        return key;
    }

    @Override
    public String toString() {
        return value;
    }
}
  1. ArrayAdapter가 우리가 만든 CommonSpinner 객체를 저장하고 spinner와 ArrayAdapter를 연결한다. android.R.layout.simple_spinner_item은 기본적으로 android에 내장되어있는 spinner Item layout이다. 마치 Listview에서 adapter holder를 만들지 않으면 하나의 text만 있는 기본 ListViewItem을 보여주는 것처럼 말이다. 즉 ListViewItem처럼 spinnerItem도 layout으로 커스터마이징 할 수 있다.
List<CommonSpinner> spinnerItems = new ArrayList<CommonSpinner>();
spinnerItems.add(new CommonSpinner(1000, "음료"));
spinnerItems.add(new CommonSpinner(1001, "건강식품"));
spinnerItems.add(new CommonSpinner(1002, "수입과자"));
ArrayAdapter<CommonSpinner> categoryAdapter = new ArrayAdapter<CommonSpinner>(getContext(), android.R.layout.simple_spinner_item , spinnerItems);
categoryAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
itemCategorySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
        CommonSpinner spinnerItem = (CommonSpinner)adapterView.getItemAtPosition(i);
        Log.d(TAG, "key:"+spinnerItem.getKey());
    }

    @Override
    public void onNothingSelected(AdapterView<?> adapterView) {

    }
});

itemCategorySpinner.setAdapter(categoryAdapter);
  1. Spinner Item을 Map처럼 사용하지 않는다면 values에 array.xml을 만들어서 보여주기만 할 수 있다. ArrayAdapter.createFromResource 함수를 사용하는데, ArrayAdapter를 생성할 때와 달리 2번째 인자는 array.xml에서 선언한 array의 id, 세번째로 Layout Id를 넣어준다.
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="itemTypeCategoryValue">
        <item>음료</item>
        <item>과일</item>
    </string-array>
</resources>
ArrayAdapter<CharSequence> categoryAdapter = ArrayAdapter.createFromResource(getContext(), R.array.itemTypeCategoryValue, android.R.layout.simple_spinner_item);
categoryAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
itemCategorySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {

    }

    @Override
    public void onNothingSelected(AdapterView<?> adapterView) {

    }
});

itemCategorySpinner.setAdapter(categoryAdapter);
Comments