我認為 Kotlin 和 XML 應該是同步的;然而,事實并非如此。對于 Kotlin,它不識別,它想做一個變體。
Kotlin:
stepsValue.setText("" event.values[0])
在我的 XML Activity_Main 上:android:id="@ id/stepsValue"
錯誤:Unresolved reference: stepsValue
錯誤似乎 Kotlin 和 XML 不同步,或者我忘記了什么?這是所有代碼:
科特林:
import android.content.Context
import android.hardware.Sensor
import android.hardware.SensorEvent
import android.hardware.SensorEventListener
import android.hardware.SensorManager
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
class MainActivity : AppCompatActivity(), SensorEventListener {
var running = false
var sensorMangage:SensorManager? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
sensorMangage = getSystemService(Context.SENSOR_SERVICE) as SensorManager
}
override fun onResume(){
super.onResume()
running = true
var stepsSensor = sensorMangage?.getDefaultSensor(Sensor.TYPE_STEP_COUNTER)
if (stepsSensor == null) {
Toast.makeText( this, "No Step Counter Sensor !", Toast.LENGTH_SHORT).show()
} else {
sensorMangage?.registerListener(this, stepsSensor, SensorManager.SENSOR_DELAY_UI)
}
}
override fun onPause() {
super.onPause()
running = false
sensorMangage?.unregisterListener(this)
}
override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {
}
override fun onSensorChanged(event: SensorEvent) {
if (running) {
stepsValue.setText("" event.values[0])
}
}
}
XML:
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@ id/stepsLbl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="92dp"
android:text="Steps"
android:textSize="50sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@ id/stepsValue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="56dp"
android:text="0"
android:textSize="35sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@ id/stepsLbl" />
</android.support.constraint.ConstraintLayout>
uj5u.com熱心網友回復:
如果您想從活動代碼訪問 XML 檔案中定義的視圖,您必須檢索它并宣告一個變數來存盤它 - 它不是自動定義的(除非您使用視圖系結,然后它是自動定義的,或正在使用已棄用的合成材料)。
要在活動中通過其 ID 獲取視圖,您可以findViewById這樣使用:
val stepsValue = findViewById<TextView>(R.id.stepsValue)
stepsValue.setText("some text")
您只能在您的活動呼叫后setContentView呼叫它onCreate,因此您不能在類成員變數宣告中使用它。如果您想將其保存為班級成員,您可以這樣做,onCreate然后在整個活動中使用它,如下所示:
// don't do this!
// private val stepsValue = findViewById<TextView>(R.id.stepsValue)
//do this instead
private lateinit var stepsValue: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
stepsValue = findViewById(R.id.stepsValue)
}
如果您厭倦了隨著應用程式的增長而手動添加大量findViewById呼叫,請查看使用視圖系結,它會自動為您完成該部分。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/489257.html
