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