Android - 스피너

유의선·2023년 7월 12일
0

안드로이드 여러 아이템 중에서 하나를 선택하는 전형적인 위젯으로 스피너(Spinner)가 있다.
스피너는 윈도우에서의 콤보박스처럼 누르면 아래에 작은 창이 나타나고 그 안의 여러 데이터 중 하나를 선택하도록 되어있다.


스피너 만들기

스피너는 <Spinner> 태그를 사용해 XML 레이아웃에 추가한 후 사용할 수 있다.

activity_main.xml 에 TextView와 Spinner를 하나씩 넣었다.


MainActivity.java 파일을 수정한다.

public class MainActivity extends AppCompatActivity {
    TextView textView;
    String[] items = {"AAA", "BBB", "CCC", "DDD", "EEE", "FFF", "GGG", "HHH"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = findViewById(R.id.textView);

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

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, items);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);

        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                textView.setText(items[position]);
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                textView.setText("");
            }
        });
    }
}

스피너 객체로 전달할 어댑터 객체를 API에서 제공하는 기본 어댑터를 이용해 만들었다.

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, items);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);

여기서 사용한 어댑터는 ArrayAdapter로 배열이 된 아이템으로 추가할 때 사용한다.

첫 번째 파라미터는 Contex 객체이므로 액티비티인 this를 전달하였다.

두 번째 파라미터는 뷰를 초기화할 때 사용되는 XML 레이아웃의 리소스 ID 값으로 API에서 제공하는 레이아웃인 simple_spinner_item을 전달하였다. 이 레이아웃은 문자열을 아이템으로 보여주는 단순 스피너 아이템의 레이아웃이다.

세 번째 파라미터는 아이템으로 보일 문자열의 데이터들의 배열이다. 변수로 정의한 items을 전달하였다.

setDropDownViewResource 메소드는 스피너의 각 아이템들을 보여줄 뷰에 사용되는 레이아웃을 지정하는 데 사용된다.
안드로이드에서 미리 정의한 리소스인 simple_spinner_dropdown_item을 전달하였다.

마지막으로 스피너 객체가 이이템 선택 이벤트를 처리 할 수 있도록 OnItemSelectedListener를 설정하였다.

        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                textView.setText(items[position]);
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                textView.setText("");
            }
        });

0개의 댓글