본문 바로가기

일하는 좀비/안드로이드

ViewGroup과 계승관계에 발목잡히다.

ListView에 표시용 값을 입력하고 
버튼 눌러서 호출 될 때 마다 AlertDialog에 리스트를 설정하는 코드를 만들었다.

  dialog = new AlertDialog.Builder(this)

            .setTitle(R.string.fontDialogTitle)

            .setCancelable(false)

            .setPositiveButton(R.string.fontDialogBtn,

                    new DialogInterface.OnClickListener() {

                @Override

                public void onClick(DialogInterface dialog, int which) {

                    dialog.dismiss();

                    dialogClickListener(dialog, which);

                }

            })

            .setView(fontListView /* 어딘가에서 생성해 둔 ListView */)

            .create();

 요런 느낌.
실행해 보니...

Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

 Exception! 왜!! Why!

...
Android의 ViewGroup, 그 계승 클래스들은 한번 설정된 부모를 멋대로 바꿀 수 없도록 되어있었다. 쿨럭.

가령, 요번같은 경우는 Layout의 부모를 찾아(getParent()) 
fontListView를 제거해준 후(removeView()),
dialog아래에 다시 추가 해 줘야 한다는걸 알게되었당...

 아... 이래서 모르면 안된다는거야... 쿨럭..