2013-02-24 54 views
1

我有一段Java编程的经验,但是我最近被介绍给Scala,并想用我的语言编写Android应用程序。我使用ScalaIDE每日和AndroidProguardScala进行eclipse安装,并且我可以运行用Scala编写的Hello World应用程序。我决定通过代码来改变TextView的值,以获得使用Scala的感觉,但我似乎无法为setText做任何工作。TextView with AndroidProguardScala的Settext

这是我最新的尝试:

import android.app.Activity 
import android.os.Bundle 
import android.view.Menu 
import android.widget.TextView 

class MainActivity extends Activity { 
    def textview = findViewById(R.id.testTV) 

    override def onCreate(savedInstanceState : Bundle) { 
     super.onCreate(savedInstanceState) 
     setContentView(R.layout.activity_main) 

     val works = "Scala is working" 

     textview.setText(works) 

} 

原来的方式,我发现贴做到这一点是:

val testText = findViewById(R.id.testTV) 
val works = "Scala is working" 
testText setText works 

无论是工作方式。两者都给我一个错误,指出setText不是android.view.View的成员。任何人都有这方面的经验可以帮助我?

这里是我的XML文件:

<TextView 
     android:id="@+id/testTV" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/hello_world" /> 

</RelativeLayout> 

回答

2

findViewById可能返回View,它不具有setText方法。由于您没有在testText上声明类型,因此编译器推断出一种类型为View

尝试:

val testText:TextView = findViewById(R.id.testTV) 

让编译器知道这是一个TextViewsetText应该工作。

+0

。我现在得到了一个在Eclipse中的mouseover错误,它说: 类型不匹配;发现:android.view.View必需:android.view.TextView。我导入了两个库,如果我注释掉android.view.View库,我会得到同样的结果。 – ubundude 2013-02-25 04:37:20

+0

在这种情况下,假设返回的内容实际上是一个TextView,则可能需要进行类型转换。可能类似于'findViewById(R.id.testTV).asInstanceOf [TextView]'。对不起,我不知道Android库的具体工作方式,所以可能会有一些我错过的东西。 – 2013-02-25 14:52:46

0
val str = "Hi from Scala" 
findViewById(R.id.testTV).asInstanceOf[TextView].setText(str) 

将写入尝试这样一个TextView