无法访问DialogStyle

Mar*_*kus 26 android android-support-library

更新android-support库后,22.2.0项目停止编译.

error: cannot access DialogStyle
  class file for android.support.v4.app.DialogFragment$DialogStyle not found
  Consult the following stack trace for details.
  com.sun.tools.javac.code.Symbol$CompletionFailure: class file for android.support.v4.app.DialogFragment$DialogStyle not found
Run Code Online (Sandbox Code Playgroud)

找不到如何解决这个问题.

以前用过的版本是 22.1.1

Jus*_*ler 10

@ takoli的答案适用于大多数情况,但如果您有其他依赖项,默默地包含support-v4,或者如果您懒得明确地排除support-v4,那么这里是另一种解决方案.

compile 'com.android.support:appcompat-v7:22.2.0'
compile 'com.android.support:recyclerview-v7:22.2.0'
compile 'com.android.support:mediarouter-v7:22.2.0'
// Force stable version of support-v4
compile ('com.android.support:support-v4:22.1.1') {
    force = true
}
Run Code Online (Sandbox Code Playgroud)

更新:

AndroidAnnotations发布了新版本3.3.2,解决了这个问题.如果您使用AndroidAnnotations更新到3.3.2并使用22.2.0支持库而不强制旧版本的support-v4.有关更多信息,请参阅此主题


Jef*_*ell 9

以下是一些对我们有用的解决方法:

解决方法1(有些人看到NPE,有些人没有)

我刚刚找到一个TEMPORARY解决方法......直到appcompat修复了这个问题:

  1. 在项目src/main/java中创建以下包

android.support.v4.app

  1. 创建以下新文件:

DialogFragment $ DialogStyle.java

  1. 内容

    包android.support.v4.app;

    // todo在appcompat中修复后删除此文件(https://code.google.com/p/android/issues/detail?id=175086)

public @interface DialogFragment $ DialogStyle {}

解决方法2(有点难看,但构建问题的可能性较小)

我找到了另一种解决方法....更丑陋...但是让我们解决了这个问题(包括上述解决方案中的NPE),直到appcompat 22.2得到修复.

  1. 在项目src/main/java中创建以下包

android.support.v4.app

  1. 复制Google v4 FragmentDialog.java代码

https://android.googlesource.com/platform/frameworks/support/+/refs/heads/master/v4/java/android/support/v4/app/DialogFragment.java

  1. 重命名该类(类似于TempFragmentDialog).如果不重命名该类,则会出现"重复"类错误.

  2. 在您的项目中,任何具有@Inject的FragmentDialog都需要扩展FragmentDialog的副本(例如:public class MyFragmentDialog extends TempFragmentDialog)


goo*_*ode 7

试试这个,它解决了我的问题:

compile ('com.android.support:appcompat-v7:22.2.0') {
        exclude module: 'support-v4' }
compile ('com.android.support:recyclerview-v7:22.2.0') {
        exclude module: 'support-v4' }
compile ('com.android.support:cardview-v7:22.2.0') {
        exclude module: 'support-v4' }
compile ('com.android.support:design:22.2.0') {
        exclude module: 'support-v4' }
// and exclude support-v4 from other dependencies as well that might include it
// finally add it, but avoid version 22.2.0...
compile ('com.android.support:support-v4:22.1.1')
Run Code Online (Sandbox Code Playgroud)

无需手动将support-v4库添加到libs目录,最后一次导入可确保项目中包含正确的版本.

BTW所有这些解决方法都不是你的错,责怪别人:)