마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

스피너 2개로 주소 검색하는법좀 알려주세요.

0 추천
제가 첫번째 스피너에서 '시/도'(예:서울시, 경상북도)를 선택하면 그 선택한 곳의 '시/군/구'를 2번째 스피너에서 선택할수있도록 할것인데요.

1 스피너:서울시 , 2 스피너:강북구

위처럼 선택을 한 상태에서 1스피너를 바꾸면

1 스피너:인천시 , 2 스피너:강북구

이렇게 2스피너가 고정되어있습니다.

저는

1 스피너:인천시 , 2 스피너:시/군/구 를 선택해 주세요.

이렇게 만들고 싶습니다.

어떻게 하면 될까요?

아 데이터는 공공데이터 포털에서 주소 api로 끌어옵니다.

소스는

 

 

ArrayAdapter<String> adapter;
ArrayAdapter<String> adapter2;

Spinner SPN_sido;
Spinner SPN_sigungu;

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

    //어레이 리스트 처음 기본 내용 추가
    ADDR1_ArrayList.add("시/도 선택");
    ADDR2_ArrayList.add("시/군/구 선택");
    
    SPN_sido = (Spinner) findViewById(R.id.SPN_sido);
    SPN_sigungu = (Spinner) findViewById(R.id.SPN_sigungu);

    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, ADDR1_ArrayList);
    SPN_sido.setAdapter(adapter);

    adapter2 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, ADDR2_ArrayList);
    SPN_sigungu.setAdapter(adapter2);
    
        SPN_sido.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                sido = adapter.getItem(position);
                Log.d("TEST", "sido = " + adapter.getItem(position));

                ADDR2_ArrayList.clear();

                ADDR2_ArrayList.add("시/군/구 선택");

                if (position != 0) {
                    String tmp = adapter.getItem(position);
                    try {
                        tmp = URLEncoder.encode(tmp, "utf-8");
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    }
                    network2 = new Network(mHandler2, "/api008/" + tmp);
                    Thread thread = new Thread(network2);
                    thread.start();
                }

            }

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

            }
        });

        SPN_sigungu.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                sigungu = adapter2.getItem(position);
            }

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

            }
        });
}
익명사용자 님이 2015년 11월 24일 질문

1개의 답변

0 추천
 
채택된 답변

선택된 시/도 를 기준으로 시/군/구 가 검색이 끝나고 시군구 스피너에 데이터를 추가 완료한 시점에

아래 코드를 넣어주시면 됩니다.

SPN_sigungu.setSelection(0);  

라쎄린드 (25,460 포인트) 님이 2015년 11월 24일 답변
교수님은 notifyDataSetChanged 를 사용하라는데 살짝 이해가 안가서 못하고 있었는데 감사합니다.
용도가 다릅니다. notifyDataSetChanged  는 스피너의 데이터가 변경된 경우 데이터가 보여지는걸 갱신하기 위함이지 초기화시키는건 아닙니다.
...