【问题标题】:Error : Ambiguous method call. Both findViewById (int) in AppCompactActivity and Activity错误:不明确的方法调用。 AppCompactActivity 和 Activity 中的 findViewById (int)
【发布时间】:2017-10-24 00:07:53
【问题描述】:

我收到错误:使用 Android Studio 3.0 RC1 初始化工具栏时出现“不明确的方法调用”。我已经使用 AppCompatActivity 扩展了我的 Activity,并使用“compileSdkVersion 26”编译了我的应用程序。 附上报错截图。

【问题讨论】:

    标签: android android-studio android-studio-3.0 appcompatactivity android-appcompat


    【解决方案1】:

    如果您最近将项目更新为 API,请尝试这样做

    文件 -> 使缓存无效/重新启动

    然后

    文件 -> 将项目与 Gradle 文件同步

    为我解决这个问题。

    【讨论】:

      【解决方案2】:

      升级到 appcompat 27 为我解决了这个问题

      【讨论】:

      • 不建议这样做,因为 lint 会告诉您:此支持库不应使用与 compileSdkVersion (26) 不同的版本 (27)
      • @paprika 要遵循此解决方案,您还需要将 compleSdkVersion 更新为 27。
      【解决方案3】:

      对我来说,compileSdkVersion 与使用的支持库不同

      【讨论】:

      • 对我来说也是这个问题。谢谢。
      【解决方案4】:

      你有

      import android.support.v7.app.AppCompatActivity
      import android.app.Activity
      

      两者都在您的代码中。 如我所见,删除import android.app.Activity,您不需要。

      【讨论】:

      • 这是一个很好的收获,但对我不起作用。我也尝试过清理项目和无效缓存。
      • 应该说清楚。猜猜你有一个(或几个)更多的导入,比如import __something__.Activity
      • 只要我删除 import android.app.Activity 它就会自动再次添加。不知道该怎么办。
      【解决方案5】:

      对我来说,将构建工具版本更改为 27.0.2 是可行的,因为您的所有其他依赖项也是 API 27。

      buildToolsVersion '27.0.2'
      

      【讨论】:

        【解决方案6】:

        我最近升级到构建工具版本 27.0.2 并遇到了同样的问题。但注意到我将 compileSdk 版本设置为 25。将 compileSdk 更改为 27 解决了这个问题。

        【讨论】:

        • 对我来说同样的问题。并将 compileSdk 更改为 27 并没有解决。但是,将 com.android.support 更改为 27.1.0(design and support-v4)解决了这个问题。
        【解决方案7】:

        “文件 - 使缓存无效/重新启动”解决了我的问题。

        【讨论】:

        • 对我来说,这是除了修复库和 SDK 版本所必需的。
        【解决方案8】:

        对我来说,给定的解决方案都不起作用,但是我遇到了这个问题,因为我的计算机上安装了 25 和 27 android sdk。一旦我删除了 sdk 25,问题就消失了。

        【讨论】:

          【解决方案9】:

          在运行FindBugs-IDEA 之类的代码分析器时可能会突然出现这种情况。清除警告的快速方法是暂时更改 app/build.gradle 中的 buildToolsVersion,然后再将其更改回来。

          例如,按照以下步骤操作:

          1. 打开您的 app/build.gradle 文件。
          2. buildToolsVersion 更改为'26.0.1' 然后同步项目(当它出现在顶部时按“立即同步”按钮
          3. buildToolsVersion 改回原来的值。
          4. 按“立即同步”按钮

          这应该可以清除错误。

          【讨论】:

          • 这就是解决方案,我只是暂时更改然后恢复构建工具版本并且它有效。但我想知道真正的问题是什么?。
          【解决方案10】:

          也许你在 compileSdkVersion 和 targetSdkVersion 之间有区别

          【讨论】:

            【解决方案11】:

            我在使用 Android Studio 3.0.0 build 171.4408382 时遇到了同样的问题。在命令行上通过 Gradle 构建工作正常,但 IDE 向我显示了上述错误。我曾尝试将 API 级别 26 与 appcompat v26.1.0 和 API 级别 27 与 appcompat v27.0.1 一起使用,但两种组合都不起作用。

            我的“解决方案”是将 compileSdkVersion 和 targetSdkVersion 降级到 API 级别 25,并将 appcompat 库降级到版本 25.4.0。

            对于所有提到的版本组合,我使用了 Gradle 插件 v3.0.0 和 Android 构建工具 v27.0.1。

            【讨论】:

              【解决方案12】:

              在我的例子中,我删除了 build.gradle (app) 文件中的约束布局依赖,它解决了这个问题。

              dependencies {
                implementation fileTree(dir: 'libs', include: ['*.jar'])
                implementation 'com.android.support:appcompat-v7:25.1.0'
                //implementation 'com.android.support.constraint:constraint-layout:2.0.4'
              }
              

              【讨论】:

                【解决方案13】:

                如果答案不能解决您的问题,您可以重置您的 android studio。 我解决了重置我的android工作室。 重置:https://stackoverflow.com/a/19397632/3129822

                【讨论】:

                  【解决方案14】:

                  首先确保您没有使用旧支持库的传递依赖项。运行以下命令并确保没有使用旧的支持库。

                  gradlew :app:dependencies
                  

                  确保使用最新的依赖项更新您的 gradle 文件。例如:compileSdkVersion 27、targetSdkVersion 27、buildToolsVersion 27.0.3。等等。确保您的应用程序风格没有使用自定义 targetSdkVersion 也会有好处。

                  Ctrl + 单击 findViewById 方法。它将向您展示 2(也许更多?)相互冲突的方法。在我的情况下,API 23 和 API 27 中的 findViewById 方法之间存在冲突。因此,我必须删除适用于 Android 版本 23 的 SDK 和源。一旦删除它并执行 Invalidate Caches/Restart,它就解决了我的问题。

                  【讨论】:

                    【解决方案15】:

                    我的 compileSDK 版本低于 targetSDK 版本,所以我要做的就是匹配它们并同步项目,错误就解决了。

                    【讨论】:

                    • 你的答案应该是评论。它对现有的答案几乎没有增加
                    • 注明。不再重复。
                    【解决方案16】:

                    删除“Android Fast Networking”库解决了我的问题

                    【讨论】:

                      【解决方案17】:

                      我也遇到了同样的问题
                      我的与 build.gradle 应用程序中的 compileSdkVersion 编号有关。
                      已更改为最新版本,它对我有用。

                      【讨论】:

                        【解决方案18】:

                        升级您的targetSdkVersionbuildToolsVersion 可能会解决问题。

                        【讨论】:

                          【解决方案19】:

                          如果这是一个新项目,则无需使缓存无效/重新启动。

                          我正在处理一个新项目,并且在 gradle 文件中没有设置版本号,minsdkversion 和 targetsdkversion 中有“N”,更改为所需的 sdk 版本解决了问题

                          【讨论】:

                            【解决方案20】:

                            appcompat 升级到 27 和将 compleSdkVersion 升级到 30 对我有用。只需升级 gradle build 中的那些。

                            【讨论】:

                              【解决方案21】:

                              只需升级您的minSdkVersion 26 它对我有用。

                              【讨论】:

                                【解决方案22】:

                                当我们创建一个最低 SDK 低于 16 的 Android 项目时,然后我们想使用“新建/活动/画廊”添加新活动,我们会看到“所选活动模板的最低 SDK 级别为 16”的指示。所以我们需要修改 build.gradle 文件中的 'minSdkVersion' ,这会导致我们进入 'Sync Now' 过程。

                                如果我们必须构建和维护最低 SDK 低于 16 的应用,我们必须将“约束布局”更改为另一个布局。但是,当我们这样做时,约束布局依赖项仍保留在“build.gradle”文件的依赖项部分中。这导致了我的错误。

                                总的来说,这适用于我们需要构建最低SDK版本低于16的android项目。

                                1. 当我们添加新活动时,我们将 build.gradle 中的 minSdkVersion 更改为“16”以上,然后单击“立即同步”。之后,我们可以选择其中一个活动模板并创建一个新活动。

                                2. 现在我们将 xml 文件中的“约束布局”更改为对应于我们创建的新活动,例如“线性布局”或“相对布局”

                                3. 此时,我们确保删除“build.gradle”中引用约束布局的依赖项,然后再次单击“立即同步”。

                                我认为避免此错误消息的最佳做法是使用最低 SDK 16 及更高版本制作 Android 项目。

                                【讨论】:

                                  【解决方案23】:

                                  这些步骤在 Android Studio for Mac(Arctic Fox v11)上对我有用:

                                  1. 在 'build.gradle' 文件(用于模块)中,将 appcompat 实现版本更改为无效的内容(例如,将 'com.android.support:appcompat-v7:25.1.0' 更改为 'com.android.support:appcompat- v7:25')

                                  2. 点击“Gradle sync now”并让它完成。这应该会产生很多错误

                                  3. 将版本更正为原始版本(例如“com.android.support:appcompat-v7:25.1.0”)。点击“Gradle sync now”并让它完成

                                  findViewId 的原始问题应该消失

                                  【讨论】:

                                    猜你喜欢
                                    • 1970-01-01
                                    • 1970-01-01
                                    • 1970-01-01
                                    • 1970-01-01
                                    • 2017-04-27
                                    • 2016-11-10
                                    • 1970-01-01
                                    • 1970-01-01
                                    • 2014-07-20
                                    相关资源
                                    最近更新 更多