2017-07-04 5 views
0

kotlinのTextviewのテキストを更新する方法。 Set Text on-create機能は動作しますが、私がメインの楽しみの外で試してみると、未解決のrefが表示されます。ウィジェット(TextView)のUNRESOLVED_REFERENCEがandroid-kotlinのエラー要素に解決されました

テキスト値を更新するためにTextViewを再利用するためのウィジェットを宣言するにはどうすればよいですか? 私はコトリンとエキスパートを持っていません。誰かが私を助けることができますか?

class MediaPickedActivity : AppCompatActivity() { 

    val fullName = "Test User" 
    var score = 0 

    override fun onCreate(savedInstanceState: Bundle?) { 
     super.onCreate(savedInstanceState) 
     setContentView(R.layout.activity_media_picked) 

     val Tv_test = findViewById(R.id.tv_text) as TextView 

     Tv_test.setText("$fullName :: $score ") 

     if (score in 0..300) { 
      score = 5 
      setText() 
     } 

    } 

    private fun setText() { 
     // Error is here. I can't set text. 
     Tv_test.setText("$fullName :: $score ") 
    } 

} 

enter image description here

答えて

0

あなたはクラスレベルのプロパティとしてあなたView Sを宣言する必要があり、その後、あなたはどこにでもクラス内からそれらにアクセスすることができます。関数内で宣言された変数は、その関数でのみアクセス可能です。

class MediaPickedActivity : AppCompatActivity() { 
    lateinit var Tv_test: TextView 

    override fun onCreate(savedInstanceState: Bundle?) { 
     super.onCreate(savedInstanceState) 
     setContentView(R.layout.activity_media_picked) 

     Tv_test = findViewById(R.id.tv_text) as TextView 
    } 

    private fun setText() { 
     Tv_test.setText("$fullName :: $score ") 
    } 
} 

私は、この例ではlateinitを使用しますが、プロパティhereを宣言するさまざまな方法についての詳細な説明を参照してください。

+0

おかげ 'lateinit VAR Tv_testを:TextView'それは作品です –

-1

あなたも必要に一度プロパティを初期化し、例えば、あなたのロジックから別の初期化、うlazy property使用することができます

class MediaPickedActivity : AppCompatActivity() { 
    val Tv_test by lazy { findViewById(R.id.tv_text) as TextView } 

    override fun onCreate(savedInstanceState: Bundle?) { 
     super.onCreate(savedInstanceState) 
     setContentView(R.layout.activity_media_picked) 

     Tv_test.setText("$fullName :: $score ") 
     // ... 
    } 

    private fun setText() { 
     Tv_test.setText("$fullName :: $score ") 
    } 

} 

ORでインライン関数を作成しますreified type parameterTコードを読みやすくします。 zsmb13 @あなたも/表示フィールドの使用を除いて、潜在的なfindViewById()バグを最小限に抑えるための超便利である(あなたがトピックの1つとして含まれているため)Kotlin Android Extensionsプラグインを使用することができ、言ったことの上に

class MediaPickedActivity : AppCompatActivity() { 
    val nonNull by find<TextView>(R.id.tv_text) 
    val nullable by find<TextView?>(R.id.tv_text) 
    // ... 
} 

inline fun <reified T : View?> Activity.find(id: Int): Lazy<T> { 
    return lazy { findViewById(id) as T } 
} 
0

メンバ変数、およびなど、次のように:

まずローカルのbuild.gradleファイルにプラグインを適用します。

apply plugin: 'kotlin-android-extensions'

import kotlinx.android.synthetic.main.<layout>.*

を...と、以下のように、あなたの活動は次のようになります。:次に、あなたのActivityクラスに特定のレイアウトのためのウィジェットのプロパティをインポート

import kotlinx.android.synthetic.main.activity_media_picked.* 

class MediaPickedActivity : AppCompatActivity() { 

    val fullName = "Test User" 
    var score = 0 

    override fun onCreate(savedInstanceState: Bundle?) { 
     super.onCreate(savedInstanceState) 
     setContentView(R.layout.activity_media_picked) 

     // Simply references via the TextView's ID, and sets its text. 
     tv_text.setText("$fullName :: $score ") 

     if (score in 0..300) { 
      score = 5 
      setText() 
     } 

    } 

    private fun setText() { 
     tv_text.setText("$fullName :: $score ") 
    } 

} 
関連する問題