custom alerat dialog 를 만드는데요...
일단 메인 클래스에서
Context mContext = m_mapcontrol.getContext();
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.camera,(ViewGroup) findViewById(R.id.ScrollView01));
MyInfoTool infotool = new MyInfoTool(m_mapcontrol, layout);
이러한 식으로 MyInfoTool 클래스에 인자를 전달 합니다.호출을 합니다.
MyInfo 클래스 안의 터치리스너 내용 입니다.
우서 인자는 이런식으로 생성자를 통해서 넘겨 받고요....
public MyInfoTool(MapControl mapcontrol, View layout)
{
m_mapcontrol = mapcontrol;
m_layout = layout;
}
AlertDialog.Builder aDialog = new AlertDialog.Builder(m_mapcontrol.getContext());//여기서buttontest는 패키지이름
aDialog.setTitle("속성정보");
aDialog.setView(m_layout);
aDialog.setNegativeButton("확인", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
AlertDialog ad = aDialog.create();
ad.show();
그런데 한번은 실행이 잘되는데....
한번 더하게 되면 에러가 납니다. 이유를 모르겠습니다.
그리고 맨위에 적어 놓은 메인클래스의 내용을 한번 더 실행하면 에러는 나질 않습니다.
그런데 그렇게는 할 수 없는 상황이고요.....ㅜㅜ
반복하면 아래의 클래스 내용만 반복되서 실행되는 상황입니다.
에러는 ad.show() 부분에서 에러가 납니다.
문제는 아래와 같습니다.
03-16 17:23:32.638: E/AndroidRuntime(957): FATAL EXCEPTION: main
03-16 17:23:32.638: E/AndroidRuntime(957): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
03-16 17:23:32.638: E/AndroidRuntime(957): at android.view.ViewGroup.addViewInner(ViewGroup.java:3344)
03-16 17:23:32.638: E/AndroidRuntime(957): at android.view.ViewGroup.addView(ViewGroup.java:3215)
03-16 17:23:32.638: E/AndroidRuntime(957): at android.view.ViewGroup.addView(ViewGroup.java:3195)
03-16 17:23:32.638: E/AndroidRuntime(957): at com.android.internal.app.AlertController.setupView(AlertController.java:401)
03-16 17:23:32.638: E/AndroidRuntime(957): at com.android.internal.app.AlertController.installContent(AlertController.java:241)
03-16 17:23:32.638: E/AndroidRuntime(957): at android.app.AlertDialog.onCreate(AlertDialog.java:336)
03-16 17:23:32.638: E/AndroidRuntime(957): at android.app.Dialog.dispatchOnCreate(Dialog.java:340)
03-16 17:23:32.638: E/AndroidRuntime(957): at android.app.Dialog.show(Dialog.java:253)
AlertDialog는 show() 할 때 create()가 호출 됩니다. 처음 호출 될 때 m_layout 이 한 번 붙게 되고, 다시 호출 되면 이전 dialog에서 상위 뷰그룹에 묶여 있으니 예외가 발생하는 것입니다.
layout을 멤버로 두지 마시고, 쉽지만 훌륭하진 않은 방법으로 호출 하실 때마다 inflate 시켜 주시던지,
show()를 호출 하기 전에 ((ViewGroup)m_layout.getParent()).remove(m_layout);을 호출 해 주시거나,
AlertDialog 말고 그냥 Dialog를 구현해서 사용하시면 될 듯 합니다.




AlertDialog ad = aDialog.create() 이부분없이
aDialog.show() 해도 같은가영
자녀의 부모에 removeView()를 해야한다고 되어있네요.