"Too many attribute references" 警告

12

我有一个应用程序,其中一些片段仅由ListViews组成。我的一些低端设备用户会遇到这样的现象,其中某个片段根本无法显示数据。当他们进入该片段时,我会显示一个ProgressBar,但是这个ProgressBar似乎永远旋转。

因此,我购买了一台低端设备,并面临着同样的问题。我通过网络请求从后端API获取ListView的数据,但从未收到响应。到目前为止,我唯一看到的警告是

W/ResourceType﹕ Too many attribute references, stopped at: 0x01010034

我在网络上找不到关于这个错误的太多信息,但似乎这个警告在这里被记录了https://github.com/SciAps/android-frameworks-base/blob/c693209edc3696884c1fcd59790dda0b9811d017/libs/utils/ResourceTypes.cpp#L1573,但是我不理解Android代码在那里做了什么。

有人知道这里发生了什么事情吗?问题是什么?我该如何解决它?

顺便说一句,我使用RoboSpice和Retrofit来进行网络请求。负责获取数据的后台服务在这个警告后停止运行,这就是为什么我永远无法得到返回数据的原因。

编辑 据我所知,未看到数据与此警告无关。无论如何,这个警告是什么意思,我该如何预防它?


你是否有一个XML文件(可能是用于主题或样式),其中一个节点具有超过20个属性?我真的不确定,但如果这个方法(Theme :: getAttribute)正在从XML主题中读取属性,那么它似乎被限制为20个。值得检查一下,如果是这种情况,可以尝试删除属性... - Guian
当我在XML中为TextView添加“theme”时,我遇到了相同的错误。 但是该样式仅具有2个属性而不是20个。 - Radon8472
3个回答

16

我不小心将样式应用为主题,导致出现此警告。在视图的XML中,通过使用style="@style/MyStyle"而不是android:theme="@style/MyStyle",我成功停止了这些警告。


1
我在我的 XML 文件中也有这个问题,按照你建议的更改了,但仍然没有改变,仍然收到“属性引用过多”的警告。所以,不是这个问题。 - Tiziano Mischi

3

实际上,@Corclark提供的最受欢迎的答案在我的情况下并不完全准确。我收到了相同的警告,但未在任何地方设置style="@style/MyStyle"。我进行了一些实验,发现实际上是这行代码导致了我的警告:

android:theme="@style/My.Switch"

接着,我找到了这篇答案。将My.Switch的样式更改为

<style name="My.Switch" parent="">
    <item name="android:background">@color/dark_grey</item>
    <item name="colorAccent">@color/Unpluq</item>
</style>

已经为我解决了警告。希望对某些人仍然有所帮助。


这对我也起作用了,但是为什么会起作用呢?将“parent”设置为空的原因是什么? - Daniel
不是很确定,似乎与样式链接的方式有关,@Ben对这个问题的回答是:“我也遇到了同样的问题,某个时刻创建了一个属性链。通过删除父级,链就会断开,所以你应该没问题了。” - Jorn Rigter

2
在使用ContextThemeWrapper创建新的ElementViews时会出现这种情况。
TextView txtView= new TextView(new ContextThemeWrapper(context, R.style.styleName));

4
所以你复现了错误?你能解释一下发生了什么,为什么会出现这种情况,如果需要的话,如何避免这种错误? - shkschneider
请使用TextView txtView= new TextView(context, null, 0, R.style.styleName);代替。 - zwlxt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接