ViewGroup.resetResolvedTextDirection中的Android StackOverflowError

我刚去Android市场发布更新到我的应用程序,并注意到从现有的安装报告了一些新的错误。 虽然我可以理解(并试图做些什么)大部分,但这个让我感到困惑:

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 ... 

这是所有的 – 没有任何其他的信息。

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

Solutions Collecting From Web of "ViewGroup.resetResolvedTextDirection中的Android StackOverflowError"

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

我追查了这个问题。 在我看来,就像Android中的一个bug,当一个View的visibility被明确地设置为VISIBLE但是该视图本身和该视图的父级没有被添加到主视图中时,会出现这个bug。

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

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

问题是当你膨胀视图,使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);