본문 바로가기
안드로이드

콤보 박스 Spinner 사용

by 코딩히어로 2022. 4. 12.
728x90

안드로이드 어플 구성에 있어서 리스트 형태의 요소를 드롭다운 형태로 보여주는

소위 말하는 콤보 박스에 대해 구현해보도록 하겠습니다.

 

 

String 배열을 사용하면 스피너는 정말 간단하게 구성이 가능합니다.

먼저 간단하게 기존에 String 배열로 구성요소가 정해진 스피너를 먼저 만들어 보겠습니다.

 

String[] site_list = {"월요일", "화요일", "수요일", "목요일", "금요일", "토요일", "일요일"};

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

ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_item,site_list);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

spinner.setAdapter(adapter);

 

ArrayAdapter를 만들어 미리 정해진 String 배열을 지정한 뒤 spinner에 setAdapter를 통해서 적용합니다.

여기까지는 너무 간단한 내용이지만 스피너 사용 시 인터넷에서 리스트를 받아오는 경우

즉 배열의 길이가 정해져 있지 않은 경우에는 어떻게 해야 하는지 응용해보도록 하겠습니다.

 

여기에서는 ArrayList를 한번 거치는 방법으로 배열 <->ArrayList를 통해

가변적인 리스트 요소갯수에 대응하도록 합니다.

 

id = result.getData().getStringExtra("id");
pw = result.getData().getStringExtra("pw");
Log.i("디버깅","로그인정보 "+id+"/"+pw);
try {
    postData = "mode=user_site&id=" + id;
    gd = new Http().execute(postData).get();
    Log.i("디버깅", "네트워크 결과 = " + gd);
} catch (ExecutionException e) {
    e.printStackTrace();
} catch (InterruptedException e) {
    e.printStackTrace();
}
String[] site_data;
String[] site_parse;
site_data = gd.split("@");
for(int i=0;i<site_data.length;i++){
    site_parse = site_data[i].split("#");
    site_id.add(site_parse[0]);
    site_title.add(site_parse[1]);
}
site_list = new String[site_title.size()];
site_title.toArray(site_list);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_item,site_list);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
site_spinner.setAdapter(adapter);

 

저는 서버에서 데이터를 받아올 때 다음과 같은 형식으로 받아옵니다.

title_id#title_name@title_id#title_name@....

각 타이틀마다의 구분자는 @이며 한 항목 내의 id와 name값은 #으로 구분합니다.

여기에서 name을 이용해서 spinner 항목을 구성합니다.

 

마지막 줄 5번째에서 볼 수 있듯이 site_title ArrayList에 가변적으로 추가된 name 항목을

toArray함수를 이용해서 String 배열로 치환합니다.

 

이렇게 만들어진 String 배열을 spinner항목에 넣어주면 작업은 완료됩니다.

728x90
반응형

댓글