【发布时间】:2020-11-29 22:08:13
【问题描述】:
我创建了一个小型练习应用程序,当单击按钮下一步时,它会更改屏幕上的图像。但是,图像和按钮都不做任何事情。对于 onClickListener 设置,我的 MainActivity 中的所有内容看起来都很正常,我按照各种指南创建了一个有效的布局。但是,我不确定为什么它看起来如此奇怪并且在模拟器中不起作用。
这是我目前编写的 MainActivity 代码:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setListener()
}
private fun changeImage(view: View) {
when (view.id) {
R.id.goodMorning -> view.setBackgroundResource(R.drawable.gm1)
R.id.goodMorning -> view.setBackgroundResource(R.drawable.gm2)
else -> view.setBackgroundColor(Color.LTGRAY)
}
}
private fun setListener() {
val goodMorning = findViewById<ImageView>(R.id.goodMorning)
val buttonNext = findViewById<TextView>(R.id.buttonNext)
fun setListener(){
val clickableViews: List<View> =
listOf(goodMorning, buttonNext)
for (item in clickableViews){
item.setOnClickListener() { changeImage(it) }
}
}
}
}
这是布局xml:
<androidx.constraintlayout.widget.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">
<ImageView
android:id="@+id/goodMorning"
android:layout_width="404dp"
android:layout_height="562dp"
android:contentDescription="@android:string/no"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.428"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.365"
tools:srcCompat="@drawable/gm1" />
<Button
android:id="@+id/buttonNext"
style="@style/twoButtons"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:layout_marginEnd="16dp"
android:layout_marginRight="16dp"
android:text="@string/buttonNext"
android:textSize="@dimen/box_text_size"
app:layout_constraintBaseline_toBaselineOf="@+id/buttonBack"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/buttonBack" />
<Button
android:id="@+id/buttonDownload"
style="@style/twoButtons"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:layout_marginEnd="16dp"
android:layout_marginRight="16dp"
android:text="@string/buttonDownload"
android:textSize="@dimen/box_text_size"
app:layout_constraintBaseline_toBaselineOf="@+id/buttonBack"
app:layout_constraintEnd_toStartOf="@+id/buttonBack"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/buttonBack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:text="@string/buttonBack"
android:textColor="@android:color/black"
android:textSize="@dimen/box_text_size"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/goodMorning"
app:layout_constraintVertical_bias="0.718" />
非常感谢任何帮助!
【问题讨论】:
-
您在外部
fun setListener()中定义了fun setListener()。内部的永远不会被调用,因此它的代码不会被执行。将内部函数内的代码提升到外部代码并删除内部函数。这样做,你就会看到进步。 -
我明白了。但是,这两张图片中只出现了一张。
标签: android kotlin imageview onclicklistener android-constraintlayout