Функция вызова кнопки Android setOnClickListener для изменения изображения кнопки

У меня есть приложение с несколькими кнопками, и изображение будет меняться в зависимости от различных требований и переменных. Но я не могу заставить изменение кнопки изображения работать внутри функции. SetOnClickListner настроит вызов функции и внутри функции изменит изображение внутри кнопки.

Как изменить изображение на кнопке?

MainActivity.kt

package com.example.sandpit9

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    imageButton1.setOnClickListener() { changeimageelement1(R.drawable.button) }
    imageButton2.setOnClickListener() { changeimageelement2(R.drawable.button) }

}
}


private fun changeimageelement1(imageButtonX: Int) {

imageButton1.setImageResource(R.drawable.greenbutton)

} 

MainActivity.xml

<?xml version = "1.0" encoding = "utf-8">
<android.support.constraint.ConstraintLayout
    xmlns:android = "http://schemas.android.com/apk/res/android"
    xmlns:tools = "http://schemas.android.com/tools"
    xmlns:app = "http://schemas.android.com/apk/res-auto"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    tools:context = ".MainActivity">
<ImageButton
        android:layout_width = "174dp"
        android:layout_height = "154dp" app:srcCompat = "@drawable/download"
        android:id = "@+id/imageButton1"
        app:layout_constraintEnd_toEndOf = "parent" android:layout_marginEnd = "8dp" android:layout_marginRight = "8dp"
        app:layout_constraintStart_toStartOf = "parent" android:layout_marginLeft = "8dp"
        android:layout_marginStart = "8dp" android:layout_marginTop = "8dp" app:layout_constraintTop_toTopOf = "parent"
        android:layout_marginBottom = "8dp" app:layout_constraintBottom_toBottomOf = "parent"/> . 
 </android.support.constraint.ConstraintLayout>

Есть ли ошибка?

the_dani 07.04.2019 23:11

Вы всегда вызываете setImageResource на imageButton1, даже в прослушивателе onClick imageButton2. Это намеренно?

EpicPandaForce 07.04.2019 23:12

Какова цель аргумента imageButtonX: Int, если вы его не используете?

forpas 07.04.2019 23:16
1
3
201
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Метод ClickListener должен быть setOnClickListener, а не setOnClickListener

Пример кода:

 button.setOnClickListener{
    counter++
    textView.text = "Click counter : $counter"
 }

Ознакомьтесь с руководством по это

Большое спасибо, учебник идеален, можно ли как-нибудь перенести изменение изображения кода в функцию? Поскольку я хочу иметь набор кнопок с разделенным кодом (в идеале в отдельных файлах .kt). то есть частное развлечение changeimageelement1(imageButtonX: Int) { imageButton1.setImageResource(R.drawable.greenbutton)}

Brendon Shaw 08.04.2019 08:12
Ответ принят как подходящий

вы не должны использовать () после setOnClickListener, просто используйте

button.setOnClickLisener{ //your actions go here }

Другие вопросы по теме