0

我创建了一个自定义键盘,每当它从 potrait 切换到 lanscape 时,都会出现以下错误并崩溃:

2020-07-04 16:31:38.846 24634-24634/com.nisarg.nboard E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.nisarg.nboard, PID: 24634
    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:4939)
        at android.view.ViewGroup.addView(ViewGroup.java:4770)
        at android.view.ViewGroup.addView(ViewGroup.java:4742)
        at android.inputmethodservice.InputMethodService.setInputView(InputMethodService.java:1483)
        at android.inputmethodservice.InputMethodService.updateInputViewShown(InputMethodService.java:1325)
        at android.inputmethodservice.InputMethodService.showWindowInner(InputMethodService.java:1767)
        at android.inputmethodservice.InputMethodService.showWindow(InputMethodService.java:1735)
        at android.inputmethodservice.InputMethodService.resetStateForNewConfiguration(InputMethodService.java:1003)
        at android.inputmethodservice.InputMethodService.onConfigurationChanged(InputMethodService.java:984)
        at android.app.ActivityThread.performConfigurationChanged(ActivityThread.java:4918)
        at android.app.ActivityThread.handleConfigurationChanged(ActivityThread.java:5108)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1731)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:176)
        at android.app.ActivityThread.main(ActivityThread.java:6635)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)

我不知道为什么会出现此错误,请有人帮助我。

4

1 回答 1

0

我找到了,我在 InputMethodService 的 onCreate() 中膨胀视图,在这种情况下配置更改后不会调用它,因此将要设置为新对话框的视图(每个键盘都是一种特殊的对话框)它们将被附加到前一个父框(假设 setInputView() 方法这样做)因此,我复制了那里的代码并将其添加到 onInitializeInterface(),它在创建服务和配置更改后都被调用,所以我会在每次配置更改时生成新视图,这样它们就不会附加到任何根目录。

于 2020-07-04T11:24:30.797 回答