나는이 오류에 관해 묻는 수십 가지 질문을 알고 있지만 제안 된 해결책 중 어느 것도 내 문제에 적용되지 않는 것으로 보인다.Android - 지정된 자식에는 이미 부모가 있습니다. 먼저 부모의 부모에게 removeView()를 호출해야합니다.
가 여기 내 로그입니다 : 여기
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
at android.view.ViewGroup.addViewInner(ViewGroup.java:1976)
at android.view.ViewGroup.addView(ViewGroup.java:1871)
at android.view.ViewGroup.addView(ViewGroup.java:1851)
at com.android.internal.app.AlertController.setupView(AlertController.java:365)
at com.android.internal.app.AlertController.installContent(AlertController.java:206)
at android.app.AlertDialog.onCreate(AlertDialog.java:251)
at android.app.Dialog.dispatchOnCreate(Dialog.java:307)
at android.app.Dialog.show(Dialog.java:225)
at com.company.MyApp.MyActivity$7.onItemClick(MyActivity.java:240)
at android.widget.AdapterView.performItemClick(AdapterView.java:284)
at android.widget.ListView.performItemClick(ListView.java:3513)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:1812)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3683)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)
이 MyActivity.java에서 onCreate()이다. 대화 상자 빌더가 표시되고 몇 가지 값이 있음을 알 수 있습니다. 두
myDialogLayout
및
myDialogBuilder
개인 클래스 멤버
@Override
public void onCreate(Bundle savedInstanceState)
{
// ... a bunch of init code...
// Create a dialog builder
myDialogLayout = getLayoutInflater().inflate(R.layout.leaving, null);
myDialogBuilder = new AlertDialog.Builder(this)
.setTitle("My Title")
.setView(myDialogLayout)
.setNegativeButton("Cancel", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which) {}
});
// ... more code ...
}
나중에 특정 버튼이 내 활동에 클릭하면 myDialogBuilder
조금을 정의하고 다음 대화 상자가 생성되어 표시됩니다
// Builder customized a bit
myDialogBuilder
.setMessage("custom message here");
// Dialog created from Builder
myDialog = myDialogBuilder.create();
// Dialog shown
myDialog.show(); // <---- MyActivity.java Line: 240
그래서 내 문제에, 내 버튼을 클릭하면 대화 상자가 성공적으로 생성 :
myDialog
는 전용 클래스 변수/회원입니다. 하지만 대화 상자에서 취소를 누른 다음 버튼을 다시 누르면 로그에 오류가 표시됩니다. 어떤 이유로 활동에서 내
myDialog
대화 상자를 다시 사용하고 싶지 않습니다. 클래스 멤버이므로
onClick
핸들러에서 액세스 할 수 있습니다.
myDialog
은 매번
myDialogBuilder.create()
에 의해 처음부터 새로 만들어 졌기 때문에 버튼을 클릭 할 때마다 새로운 대화 상자가됩니다.
누구나 무슨 문제인지 알고 계십니까? 취소 버튼을 누를 때 myDialog.dismiss()
을 추가하려고 시도했지만 차이가 없습니다.
또한 내 myDialogBuilder
에서 사용자 지정 XML 레이아웃이 대화보기에 사용됨을 알 수 있습니다. 오류 메시지에 따르면 대화 상자에서보기가 사용되지 않도록하려면 removeView()
을 사용하기를 원합니다. 그러나 myDialogBuilder.removeView()
은 유효한 방법이 아닙니다.
열쇠가되었습니다.클래스 멤버 변수가 아닌 myDialogLayout을 제거하고 대신'onClick' 핸들러 메소드를 로컬로 만들었습니다. 그렇게하면 매번 팽창되는 새로운 레이아웃이됩니다. 감사! –