본문 바로가기

진리는어디에

안드로이드 - 다이얼로그에 Spinner 붙이기

안드로이드 어플리케이션에서 다이얼로그 안에 Spinner를 하나 붙이려고 했으나 모든 것이 정상인것 처럼 보임에도 불구하고 Spinner 객체가 null로 셋팅 되는 현상이 있었습니다. 코드는 아래와 같습니다 :

static final int DLG_ID_INSERT = 0;
private Spinner spinner;
private ArrayAdapter<CharSequence> adapter;

protected Dialog onCreateDialog(int id) {
    Dialog dlg = null;
    switch (id) {
    case DLG_ID_INSERT:
        dlg = new Dialog(this);
        dlg.setContentView(R.layout.insert_dlg);
   
        spinner = (Spinner)findViewById(R.id.spinner_item_category); // null
        ArrayList<CharSequence> list = new ArrayList<CharSequence>();
        list.add("category1");
        list.add("category2");

        adapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_spinner_item, list);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
   
        spinner.setAdapter(adapter); // NullPointerException!!
        break;
    }
}

문제는 Spinner 객체를 찾지를 못한다는 것이었습니다. 근 하루를 삽질한 끝에 [여기]에서 답을 발견했습니다..의외로 허망한 것이더군요.

static final int DLG_ID_INSERT = 0;
private Spinner spinner;
private ArrayAdapter<CharSequence> adapter;

protected Dialog onCreateDialog(int id) {
    Dialog dlg = null;
    switch (id) {
    case DLG_ID_INSERT:
        dlg = new Dialog(this);
        dlg.setContentView(R.layout.dialog);
   
        spinner = (Spinner)dlg.findViewById(R.id.spinner_item_category); 
        ArrayList<CharSequence> list = new ArrayList<CharSequence>();
        list.add("category1");
        list.add("category2");

        adapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_spinner_item, list);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
   
        spinner.setAdapter(adapter); // OK!!
        break;
    }
}

수정한 것이라고는 12라인의 findViewById함수 앞에 dlg 객체를 명시한 것 입니다. dialog.xml 레이아웃에서 뭔가를 읽어 오려고 하면 그것을 이용해 만들어진 View에서 찾았었어야 할 것을 너무 교제만 따라하다 발생한 실수 였습니다.

다른 누군가에게 도움이 되었으면 합니다.

유익한 글이었다면 공감(❤) 버튼 꾹!! 추가 문의 사항은 댓글로!!