Android 指定子项的问题已具有父项
我有一个带有编辑文本输入的警报对话框Android 指定子项的问题已具有父项,android,kotlin,android-alertdialog,Android,Kotlin,Android Alertdialog,我有一个带有编辑文本输入的警报对话框 fun Activity.showAlertDialogWithInput(input : EditText, @StringRes messageResId : Int, @StringRes positiveButtonMessage: Int, @StringRes negativeButtonMessage: Int, yesFunc: () -> Unit, noFunc: () -> Unit){ val alert =
fun Activity.showAlertDialogWithInput(input : EditText, @StringRes messageResId : Int, @StringRes positiveButtonMessage: Int, @StringRes negativeButtonMessage: Int, yesFunc: () -> Unit, noFunc: () -> Unit){
val alert = AlertDialog.Builder(this)
.setMessage(messageResId)
.setView(input)
.setPositiveButton(positiveButtonMessage) { _: DialogInterface, _: Int -> yesFunc() }
.setNegativeButton(negativeButtonMessage){ _: DialogInterface, _: Int -> noFunc()}
.create()
alert.show()
当我多次调用此函数时,就会出现问题,因为我得到了“指定的子对象已经有父对象”异常。
我知道我必须以某种方式删除视图,我试着这样做:
((ViewGroup)input.getParent()).removeView(input); // <- fix
“问题发生了”。您需要显示logcat,以便我们可以看到问题所在。这似乎是一个非常常见的错误,因此stacktrace可能会显示缺少的内容。我添加了编辑OK,那么您实际在哪里充气/提供编辑文本呢?我看不出发生了什么让你写“视图组演员阵容不工作”
E/AndroidRuntime: FATAL EXCEPTION: main
Process: ro.quik, PID: 26986
io.reactivex.exceptions.OnErrorNotImplementedException: The exception was not handled due to missing onError handler in the subscribe() method call. Further reading: https://github.com/ReactiveX/RxJava/wiki/Error-Handling | java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:704)
at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:701)
at io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:77)
at io.reactivex.internal.observers.LambdaObserver.onNext(LambdaObserver.java:67)
at io.reactivex.internal.util.HalfSerializer.onNext(HalfSerializer.java:107)
at io.reactivex.internal.operators.observable.ObservableTakeUntil$TakeUntilMainObserver.onNext(ObservableTakeUntil.java:79)
at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:201)
at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:255)
at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:124)
at android.os.Handler.handleCallback(Handler.java:888)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:8147)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101)
Caused by: 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:5168)
at android.view.ViewGroup.addView(ViewGroup.java:4997)
at android.view.ViewGroup.addView(ViewGroup.java:4969)
at com.android.internal.app.AlertController.setupCustomContent(AlertController.java:647)
at com.android.internal.app.AlertController.setupView(AlertController.java:541)
at com.android.internal.app.AlertController.installContent(AlertController.java:272)
at android.app.AlertDialog.onCreate(AlertDialog.java:446)
at android.app.Dialog.dispatchOnCreate(Dialog.java:579)
at android.app.Dialog.show(Dialog.java:397)
at ro.quik.ui.extensions.ActivityExtensionsKt.showAlertDialogWithInput(ActivityExtensions.kt:102)
at ro.quik.ui.features.scan.BarcodeReaderActivity$onStart$2.accept(BarcodeReaderActivity.kt:77)
at ro.quik.ui.features.scan.BarcodeReaderActivity$onStart$2.accept(BarcodeReaderActivity.kt:26)
at io.reactivex.internal.observers.LambdaObserver.onNext(LambdaObserver.java:63)
at io.reactivex.internal.util.HalfSerializer.onNext(HalfSerializer.java:107)
at io.reactivex.internal.operators.observable.ObservableTakeUntil$TakeUntilMainObserver.onNext(ObservableTakeUntil.java:79)
at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:201)
at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:255)
at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:124)
at android.os.Handler.handleCallback(Handler.java:888)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:8147)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101)