2012-02-07 31 views
7

我刚去Android市场发布更新到我的应用程序,并注意到从现有安装报告了一些新的错误。虽然我能理解(并尝试做一些事情),他们中的大多数这个让我颇为不解:ViewGroup.resetResolvedTextDirection中的Android StackOverflowError

java.lang.StackOverflowError 
at android.view.ViewGroup.resetResolvedTextDirection(ViewGroup.java:5131) 
at android.view.ViewGroup.resetResolvedTextDirection(ViewGroup.java:5131) 
at android.view.ViewGroup.resetResolvedTextDirection(ViewGroup.java:5131) 
at android.view.ViewGroup.resetResolvedTextDirection(ViewGroup.java:5131) 
at android.view.ViewGroup.resetResolvedTextDirection(ViewGroup.java:5131) 
at android.view.ViewGroup.resetResolvedTextDirection(ViewGroup.java:5131) 
... this line repeats about 200 times or so ... 

这是所有有 - 任何形式的其他信息。

我完全不知道从哪里开始调查。任何想法,不胜感激。

回答

1

我追踪了这个问题。在我看来,就像Android中的一个bug,当视图的visibility明确设置为VISIBLE时展示,但视图本身和视图的父项未添加到主视图。

我终于解决了这个问题,将有问题的ListView添加到XML中,而不是在代码中创建它,并将代码setVisibility(View.VISIBLE)移动到整个视图添加到主视图后(即父层次结构可以从每个孩子一直到开始)。

至少我没有得到这个错误了。

10

这似乎是在ICS中添加的一种方法,因此它是4.0以上。看看the code它看起来像你在你的层次结构中有某种视图循环,因为它显然是child.resetResolvedTextDirection();行这样做。换句话说,您的布局中的一个ViewGroup类不知何故被添加为自己的孩子。

+0

我明白了。我相当肯定,一个观点不能作为一个孩子被直接或间接地添加到自身中,否则会产生各种各样的问题。我会尝试获取ics模拟器并尝试在那里运行调试器 - 也许将能够找到问题。 – 2012-02-07 17:38:38

+0

是的,有一个“父”检查,你会_think_会避免这一点。但我无法以任何其他方式解释递归循环。除非它不是递归的,你的视图层次真的很深。 – 2012-02-07 18:03:39

1

问题是当您膨胀的视图,使inflater.inflate(R.layout.view_topic, this); 和这个视图的父母仍然不可见/呈现在舞台上。

请务必使其后的父母是可见的,或致电

View child = inflater.inflate(R.layout.view_topic, null); // null will give warning but it wont throw an exception 
     this.addView(child);