2013-02-24 55 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