【问题标题】:Error: Avoid non-default constructors in fragments: use a default constructor plus Fragment#setArguments(Bundle) instead [ValidFragment]错误:避免片段中的非默认构造函数:使用默认构造函数加上 Fragment#setArguments(Bundle) 而不是 [ValidFragment]
【发布时间】:2015-08-18 17:52:35
【问题描述】:

我有一个名为Fragment_scheduled_newdetail 的片段,下面是我在启动时传递给这个片段的构造函数,我收到以下错误:

错误:错误:避免在片段中使用非默认构造函数:使用默认构造函数加上 Fragment#setArguments(Bundle) 而不是 [ValidFragment]

这似乎只发生在 Android Studio 中(我正在从 Eclipse 移植这个项目,在 Eclipse 中没有问题)

当我尝试在release 模式下创建应用时

public Fragment_scheduled_newdetail(BlockInfo blockToDisplayT) {
    super();
    this.blockToDisplay = blockToDisplay;
}

如果我在debug 模式下生成 APK,它可以正常工作。 (release 模式会失败)

【问题讨论】:

标签: android android-fragments apk release default-constructor


【解决方案1】:

这是 Android Studio 的一个很好的强烈建议。原因是“重新实例化片段时不会调用构造函数”。相反 setArguments(Bundle) 会。这是根据谷歌网页@Fragment。 你有 Bundle 传递的代码吗?

在 Android 框架中,onCreate 和 onCreateView 等重写方法会被恢复,而不是构造函数,例如当用户改变方向时。

【讨论】:

  • 好的,是的,现在想弄清楚...在片段之间传递包。一旦我开始工作,就会将此标记为答案
  • @user1406716,我在帖子中添加了评论。它说“在 Android 框架中,像 onCreate 和 onCreateView 这样的覆盖方法会被恢复,而不是构造函数,比如当用户改变方向时”
  • @user1406716,您现在通过 Bundles 做得如何?
【解决方案2】:

我知道答案已经被接受,但对于那些找到最简单方法来避免这种情况的人来说。所以试试这个,它可以帮助我:

android {
    lintOptions {
        checkReleaseBuilds false
    }
}

只需在您的 build.gradle 文件中写入此内容,然后同步项目并尝试再次制作已签名的 apk。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-17
    • 1970-01-01
    • 2010-10-30
    • 2023-03-20
    • 1970-01-01
    • 2013-05-06
    • 2016-03-25
    相关资源
    最近更新 更多