티스토리 뷰

안드로이드 어플리케이션에서 다이얼로그 안에 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 객체를 찾지를 못한다는 것이었습니다. 근 하루를 삽질한 끝에 인터넷에서 답을 발견했습니다..의외로 허망한 것이더군요(http://efreedom.com/Question/1-3673717/Set-Spinner-Within-Custom-Dialog) :

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;
    }
}


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

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

댓글
댓글쓰기 폼