我有一些使用Java for Android编程的经验,但最近我介绍了Scala,并希望用该语言编写我的Android应用程序。我使用ScalaIDE nightly和AndroidProguardScala进行eclipse设置,我可以运行用Scala编写的hello world应用程序就好了。我决定通过代码更改TextView的值以获得使用Scala的感觉,但我似乎无法为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>
答案 0 :(得分:2)
findViewById
可能会返回View
,但没有setText
方法。由于您未在testText
上声明类型,因此编译器推断的类型为View
。
尝试:
val testText:TextView = findViewById(R.id.testTV)
以便编译器知道它是TextView
,并且setText
应该有用。
答案 1 :(得分:0)
val str = "Hi from Scala"
findViewById(R.id.testTV).asInstanceOf[TextView].setText(str)
将写入textview