事件发生的原因

昨天下午,我突然和 R 对象玩的好好的,然而她确突然的消失了。

R 对象她可是我不能缺少的,她能帮助我获取布局文件(哦,原来是编程,那没事了)以及通过 id 的方式来获取我创建的组件。我在重新构建项目时,突然给我报错。还说什么 Cannot resolve symbol R ,甚至还建议我找同名小三、以及建议我建立一个R的“墓碑”,这种蠢事,我是绝对不会做的。

这些建议分别如下:

以上建议等于没有建议。
所以,我坚信 R 对象并没有消失,我一定要把她找回来。

错误的线索

其实我在发现 R 对象消失的时候,我一直在寻找 R 对象不存在的解决办法。后面才发现,我找错了!R 对象在写着写着就直接没了的情况也是非常之少见的。

这条路根本就是迷惑性的路子,走来走去又走回原处。后面我们从消失的真正的根源开始找起。

看了错误信息突然发现了一些破绽,随后去问问度娘,发现 R 消失的问题居然是我的布局文件有错误才导致的,所以才有这种 No resource found 这种问题。

正确的线索

在发现是布局文件出现了问题时,我重新定位到错误中。通过上面的错误信息发现是找不到 ‘@id/add_btn’ 这个值,可是在我的代码中发现是有的。下面的代码明明就有啊。

<!-- 添加的城市 -->
<ListView
    android:id="@+id/addedCity"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@id/add_btn"
    android:layout_below="@id/return_btn"
    />

<!--&lt;!&ndash; 添加按钮 -->
<RelativeLayout
    android:id="@+id/add_btn"
    android:layout_width="match_parent"
    android:layout_height="55dp"
    android:layout_alignParentBottom="true">
    ...
</RelativeLayout>

后面在对错误信息进行一个搜索,发现需要在“@”后面加上一个“+”号,也就是 layout_above 和 layout_below,然后我全部加上去,重新构建了一下。发现还真的就找回来了,代码也不报错了。

android:layout_above="@+id/add_btn"
android:layout_below="@+id/return_btn"

后续思考

直到今天上午,才明白 R 对象消失的原因。因为这些 xml 布局文件是从上而下执行的,而上面的 id 为 id/add_btn 是在下面,并且我们是在此之前进行寻找的。所以就会提示找不到,为了防止这种情况的发生,直接在 layout_above 的 id 的“@”后面加上一个“+”号也能解决。

android:layout_above="@+id/add_btn"
android:layout_below="@id/return_btn"

R 对象总算是找回来了,开心心😊😊😊

参考来源

https://blog.csdn.net/asdf9328/article/details/50360358