1

我正在尝试使用 Scala 2.9.2 创建一个 Android 应用程序。到目前为止,我已经完成了所有要编译的工作。

但是,当我在活动中执行以下操作时遇到问题:

override def onCreateDialog(id: Int) {

编译器抱怨一个不兼容的类型,因为Activity.onCreateDialog()它需要一个原语int,但我正在传递一个scala.Int.

以下是编译错误:

error: overriding method onCreateDialog in class Activity of type (x$1: Int)android.app.Dialog;
[INFO]  method onCreateDialog has incompatible type
[INFO]   override def onCreateDialog(id: Int) {
[INFO]                ^
[ERROR] one error found

我认为这些将是兼容的。

谁能建议如何解决这个问题?

4

1 回答 1

1

以下是针对 Scala 2.10 的,但我认为错误的原因与 Scala 2.9.x 完全相同。

顺便说一句,onCreateDialog(int)该类型的方法Activity已被弃用,但它不是重点。

现在,无论如何我都不是 Scala 专家,但据我所知,不返回任何内容的函数看起来确实def fun(arg) {}def fun(arg) = {}. 注意=。如果需要,您还可以拼出返回类型。

所以我试图覆盖你提到的方法,这是(简单的)实现:

override def onCreateDialog(id : Int) = {
    super.onCreateDialog(id)
}

它编译并运行得很好。当你删除=时,你会得到你现在遇到的错误:

类型方法onCreateDialog类中的覆盖方法具有不兼容的类型Activity(x$1: Int)android.app.Dialog;onCreateDialog

整体MainActivity

class MainActivity extends Activity {
    override def onCreate(savedInstanceState : Bundle) {
      super.onCreate(savedInstanceState)
      setContentView(R.layout.activity_main_activity)
    }

    override def onCreateDialog(id : Int) = {
        super.onCreateDialog(id)
    }   
}

注意:我使用 ADT 和捆绑的 Eclipse(Juno),创建了一个默认的 Android 项目,包括 Scala-IDE(Scala 特性)和 AndroidProguardScala(AndroidProguardScala 特性)

于 2013-03-10T08:26:49.080 回答