Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android中的非法状态异常_Android_Static_View_Illegalstateexception - Fatal编程技术网

Android中的非法状态异常

Android中的非法状态异常,android,static,view,illegalstateexception,Android,Static,View,Illegalstateexception,我对一个非法国家的例外情况有一些问题。我有一个函数,可以创建、删除线性布局中的所有视图,并重新创建和添加它们。其中一个文本视图必须是静态的,这样它才能与我创建的自定义视图交互。当该文本视图第二次添加到布局时,程序抛出IllegalStateException。在对程序进行了一点单步操作之后,似乎父LinearLayout已从其子视图中删除了视图,但TextView本身仍然“认为”它有一个父视图。这是我的代码:(只有重要的部分) 有人知道发生了什么事吗 编辑:以下是日志: 02-13 09:04:

我对一个非法国家的例外情况有一些问题。我有一个函数,可以创建、删除线性布局中的所有视图,并重新创建和添加它们。其中一个文本视图必须是静态的,这样它才能与我创建的自定义视图交互。当该文本视图第二次添加到布局时,程序抛出IllegalStateException。在对程序进行了一点单步操作之后,似乎父LinearLayout已从其子视图中删除了视图,但TextView本身仍然“认为”它有一个父视图。这是我的代码:(只有重要的部分)

有人知道发生了什么事吗

编辑:以下是日志:

02-13 09:04:41.012: ERROR/AndroidRuntime(10489): FATAL EXCEPTION: main
02-13 09:04:41.012: ERROR/AndroidRuntime(10489): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
02-13 09:04:41.012: ERROR/AndroidRuntime(10489):     at android.view.ViewGroup.addViewInner(ViewGroup.java:2012)
02-13 09:04:41.012: ERROR/AndroidRuntime(10489):     at android.view.ViewGroup.addView(ViewGroup.java:1907)
02-13 09:04:41.012: ERROR/AndroidRuntime(10489):     at android.view.ViewGroup.addView(ViewGroup.java:1864)
02-13 09:04:41.012: ERROR/AndroidRuntime(10489):     at android.view.ViewGroup.addView(ViewGroup.java:1844)
02-13 09:04:41.012: ERROR/AndroidRuntime(10489):     at android.PhysicsEngine.Diagram.createTraceLayout(Diagram.java:357)
02-13 09:04:41.012: ERROR/AndroidRuntime(10489):     at android.PhysicsEngine.Diagram.access$3(Diagram.java:173)
02-13 09:04:41.012: ERROR/AndroidRuntime(10489):     at android.PhysicsEngine.Diagram$2.onClick(Diagram.java:270)
02-13 09:04:41.012: ERROR/AndroidRuntime(10489):     at android.view.View.performClick(View.java:2405)
02-13 09:04:41.012: ERROR/AndroidRuntime(10489):     at android.view.View$PerformClick.run(View.java:8813)
02-13 09:04:41.012: ERROR/AndroidRuntime(10489):     at android.os.Handler.handleCallback(Handler.java:587)
02-13 09:04:41.012: ERROR/AndroidRuntime(10489):     at android.os.Handler.dispatchMessage(Handler.java:92)
02-13 09:04:41.012: ERROR/AndroidRuntime(10489):     at android.os.Looper.loop(Looper.java:123)
02-13 09:04:41.012: ERROR/AndroidRuntime(10489):     at android.app.ActivityThread.main(ActivityThread.java:4627)
02-13 09:04:41.012: ERROR/AndroidRuntime(10489):     at java.lang.reflect.Method.invokeNative(Native Method)
02-13 09:04:41.012: ERROR/AndroidRuntime(10489):     at java.lang.reflect.Method.invoke(Method.java:521)
02-13 09:04:41.012: ERROR/AndroidRuntime(10489):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
02-13 09:04:41.012: ERROR/AndroidRuntime(10489):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
02-13 09:04:41.012: ERROR/AndroidRuntime(10489):     at dalvik.system.NativeStart.main(Native Method)

日志说明了你需要做什么

child.getParent().removeView(child);
这基本上是可行的。检查是否为null,getParent()可能为null


一个简短的解释:布局变量不是静态的,因此您用来调用
removeView()
的布局变量很可能已经是另一个布局变量,因此它不适用于子级。为了避免这种情况,您应该尝试通过调用
getParent()
来始终访问父级,而不仅仅是使用可能已被新对象覆盖的成员变量。

视图可以是静态的吗?请发布日志以进一步了解视图参考可以是
静态的
,但我会避免这样做,除非我别无选择。如果@Tom C坚持以这种方式使用它,那么请阅读关于感谢文章的这篇文章。textview是使用活动的上下文创建的,因此不应泄漏内存。我的问题只是非法国家的例外。我严重怀疑这种观点是否一定是静态的。您确定每次布局中都显示相同的“latchingText”视图吗?也许你每次都需要通过getViewById找到它。我已经在问题中添加了日志猫。非常感谢。在处理空指针和强制转换后,它工作得非常好。我不知道为什么它的工作原理与布局不同。不过,请移除视图(latchingText)。这很有意义。非常感谢。那么“孩子”的问题是什么呢?recreateLayout()中的变量“layout”或?
child.getParent().removeView(child);