
선택할 수 있는 항목들이 보이고 선택하면 원래대로 돌아간다
웹에서는 콤보박스 앱에서는 스피너
스피너도 여러개 중 하나를 선택하는 선택위젯이고 어댑터를 사용한다.
위의 스피너처럼 텍스트로만 구성된 스피너는 이미 안드로이드 api에 들어가 있는 어댑터를 사용하는 것도 좋다.

먼저 팔레트에서 텍스트뷰와 스피너를 하나씩 추가해준다.
package com.example.spinner;
import androidx.appcompat.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.TextView;
public class MainActivity extends AppCompatActivity {
TextView textView;
//데이터 관리를 위한 String 배열 items
String[] items = {"소녀시대","걸스데이","티아라","여자친구"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView)findViewById(R.id.textView);
Spinner spinner = (Spinner) findViewById(R.id.spinner);
//어댑터를 직접 정의하지 않는다. 안드로이드 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);
//스피너에 리스너 등록
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
//선택했을때와 선택하지 않았을 때 textView의 내용을 리스너에서 정의해줌
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
textView.setText(items[i]);
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
textView.setText("선택되지 않음");
}
});
}
}
전에 했던 리스트뷰의 어댑터는 직접 어댑터를 정의했었는데, 이번에는 ArrayAdapter를 이용하고 인자에 안드로이드에 이미 있는 api를 이용해서 간편하게 만든다.
ArrayAdapter는 직접 Adapter를 정의하지 않는 경우 주로 사용하는 어댑터이다.
아이템으로 문자열 하나만 사용할 때는 유용하다. (리스트뷰에도 사용가능)

문자열 하나가 아닌 여러개 데이터가 아이템에 필요한 경우 전에 한것 처럼 BaseAdapter를 상속해서 어댑터를 새로 정의하는게 나을 수 있다.