升级到 appcompat v24 后找不到与给定名称匹配的资源

No resource found that matches the given name after upgrading to appcompat v24

我在 app:toolbarId 上定义折叠工具栏时在 Android 上遇到此错误。如下所示,工具栏已定义。我注意到我可以通过完全省略工具栏的 id 来解决它(然后它会使用它遇到的第一个工具栏)但我无法弄清楚为什么它停止工作以及是否有任何我遗漏的......知道吗?

    <android.support.design.widget.CollapsingToolbarLayout
        app:toolbarId="@id/toolbar"
        ... >

        <ImageView
            ... />

        <android.support.v7.widget.Toolbar 
            android:id="@+id/toolbar"
            ... />

    </android.support.design.widget.CollapsingToolbarLayout>

原来这个问题是前向参考。不是 v23/v24 问题,而是我同时进行的一些其他更改的结果......最初这个布局 XML 不是布局 XMLs(按字母顺序排列)列表中的第一个所以有一个以前的布局 XML(其他一些 activity)定义了一个 @id/toolbar。这足以让 gradle 接受此 activity 中的 app:toolbarId="@id/toolbar" 作为有效参考。幸运的是(或不是...)在 运行 时间它仍然引用了正确的工具栏 - 这个 activity 的 @id/toolbar - 所以我没有注意到我的(前向引用)错误。

修复很简单 - 将“+”移动到 app;toolbarId 中的(第一个)引用(这是我一开始就应该做的)。见下文:

    <android.support.design.widget.CollapsingToolbarLayout
        app:toolbarId="@+id/toolbar"
        ... >

        <ImageView
            ... />

        <android.support.v7.widget.Toolbar 
            android:id="@id/toolbar"
            ... />

    </android.support.design.widget.CollapsingToolbarLayout>