안드로이드 어플리케이션에서 다이얼로그 안에 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에서 찾았었어야 할 것을 너무 교제만 따라하다 발생한 실수 였습니다.

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

Posted by kukuta

댓글을 달아 주세요

  1. Favicon of http://blog.ggamsso.wo.tc BlogIcon 깜쏘 2010.12.23 22:13  댓글주소  수정/삭제  댓글쓰기

    갑자기 왠 안드로이드입니까...
    이건 뭔 일입니까...

  2. Favicon of http://blog.naver.com/zalnon2 BlogIcon 감사합니다. 2011.11.03 09:25  댓글주소  수정/삭제  댓글쓰기

    감사합니다. 많은 도움이 되었습니다.

    제 블로그에 퍼갑니다.

    수고하세요~

  3. 정말 감사합니다. 2012.06.20 16:23  댓글주소  수정/삭제  댓글쓰기

    몇시간 동안 이유를 알수없었는데 덕분에 해결되었네요. 이렇게 또 배우네요...

  4. ㅇㅇ 2012.07.25 11:01  댓글주소  수정/삭제  댓글쓰기

    진짜 레알 큰 도움이 되었습니다 감사합니다^^

  5. gxuk 2012.10.03 00:57  댓글주소  수정/삭제  댓글쓰기

    아...... 정말 감사합니다.ㅠ 후어어어엉

  6. 우와 2012.11.15 11:00  댓글주소  수정/삭제  댓글쓰기

    간지러운 곳을 긁어주셨네요. 땡큐베리감사용

  7. 허허 2015.06.09 15:01  댓글주소  수정/삭제  댓글쓰기

    허 감사합니다..전 프래그먼트에서 사용중이었는데, getActivity가 아닌 dialog를 사용해야했었군요..수정햇더니 잘됩니다..정말 감사합니다.