【问题标题】:Cannot create a default constructor from a class that extends Dialog无法从扩展 Dialog 的类创建默认构造函数
【发布时间】:2016-09-12 12:16:01
【问题描述】:

我有一个扩展 Dialog 的类。当我尝试生成我的应用时,我收到了一条消息

Error: This class should provide a default constructor (a public constructor with no arguments)

我试过public myclass(){},但它不起作用。如何定义默认构造函数?

【问题讨论】:

  • 构造函数的第一行应该是super(context);
  • 查看 API 文档,developer.android.com/reference/android/app/Dialog.html 如果查看直接子类,例如 AlertDialog,您可以看到这些子类正在实现的构造函数。也许您没有实现所有需要的构造函数?
  • “它不起作用”是什么意思?
  • @ELITE 如果我按照你说的做,我必须做这个public myclass(Context context){super(context);},我想做一个默认构造函数
  • @Code-Apprentice 出现错误

标签: java android dialog


【解决方案1】:

第一路

private static Context context;

public static void setContext(Context context_) {
    context = context_;
}

public myclass() {
    super(context);
}

注意:在调用这个类的构造函数之前不要忘记调用setContext方法。

第二种方式

1) 在您的项目中创建应用程序类

public class MyApplication extends Application {

    private static Context mContext;

    @Override
    public void onCreate() {
        super.onCreate();
        mContext = getApplicationContext();
    }

    public static Context getContext() {
        return mContext;
    }
}

2) 在 Manifest 中声明此应用程序,如下所示

<application
    android:name=".MyApplication"
    android:icon="@drawable/icon"
    android:label="@string/app_name" >

3) 类super 方法在你的类中像

public myclass() {
    super(MyApplication.getContext());
}

希望对你有所帮助。

【讨论】:

  • 无法解析符号“上下文”,我试图声明它说在调用超类型构造函数之前无法引用它
  • 更改构造函数然后...就像public myclass(Context context) {,这将解决问题。
  • 您必须通过将Context 传递给构造函数来创建此类的对象。
  • 哦,对不起,我忘记了主要目标……您可以使用静态 Context 对象来实现这一目标
  • 老实说,我真的会避免保持对 Context 的静态引用
【解决方案2】:

尝试添加如下默认构造函数...

public myclass(Context context){ 
  super(context);
}

【讨论】:

  • 你不能有那个构造函数。
  • 它可以工作,但如果我这样做不会在程序运行期间造成任何问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多