Android Kotlin не может изменить текстовую строку внутри функции - PullRequest
1 голос
/ 10 апреля 2019

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

Я уверен, что проблема заключается в вызове функции, а не в передачеправильная информация о деятельности, но просто не может понять, что не так.

MainActivty.kt

package com.example.sandpit9

import android.content.Intent
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.activity_main.view.*
import org.w3c.dom.Text

class MainActivity : AppCompatActivity() {

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

        imageButton1.setOnClickListener {v: View -> toast(v) }

        imageButton1.setOnClickListener {
            imageButton1.setImageResource(R.drawable.greenbutton)
            textView1.text = "1234"
        }
    }

    public fun toast(v: View) {
        v.textView2.text = "1234"
    }
}

MainActivty.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">

<TextView
        android:text="TextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textView1"
        android:layout_marginTop="8dp"
        app:layout_constraintTop_toBottomOf="@+id/imageButton1"
        android:layout_marginBottom="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        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:textSize="34sp"/>
<TextView
        android:text="textvar1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textView2"
        android:textSize="34sp"
        android:layout_marginTop="108dp"
        app:layout_constraintTop_toBottomOf="@+id/imageButton1"
        android:layout_marginEnd="8dp"
        app:layout_constraintEnd_toEndOf="parent"
        android:layout_marginRight="8dp"
        android:layout_marginStart="8dp"
        app:layout_constraintStart_toStartOf="parent"
        android:layout_marginLeft="8dp"
        app:layout_constraintHorizontal_bias="0.535"/>
<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"
        app:layout_constraintHorizontal_bias="0.542"
        app:layout_constraintVertical_bias="0.187"/>

</android.support.constraint.ConstraintLayout>

Ответы [ 4 ]

2 голосов
/ 10 апреля 2019

Вы перезаписываете прослушиватель щелчков. OnClickListener - это одно свойство, а не список.

imageButton1.setOnClickListener {v: View -> 
  toast(v)
  imageButton1.setImageResource(R.drawable.greenbutton)
  textView1.text = "1234"
}


1 голос
/ 10 апреля 2019

Большое спасибо, насколько простое решение. Большое спасибо за помощь, setOnClickListener устанавливается только один раз для запуска функции. Это конечный код, который работает

package com.example.sandpit9

import android.content.Intent
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.activity_main.view.*
import org.w3c.dom.Text

class MainActivity : AppCompatActivity() {

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

    imageButton1.setOnClickListener{v: View -> toast(v)}

    }



private fun toast(v: View) {
    imageButton1.setImageResource(R.drawable.greenbutton)
    textView1.text = "1234"
    textView2.text = "1234"



}

}
1 голос
/ 10 апреля 2019
imageButton1.setOnClickListener {v: View -> toast(v) }

imageButton1.setOnClickListener {
    imageButton1.setImageResource(R.drawable.greenbutton)
    textView1.text = "1234"
}

Проблема: ImageButton имеет только один OnClickListener для прослушивания события, когда есть собственное событие щелчка.Вы можете установить слушателя, используя setOnClickListener.Потому что в вашем коде вы используете setOnClickListener два раза, поэтому второй переопределит первый.

Решение: Измените код на

class MainActivity : AppCompatActivity() {

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

        imageButton1.setOnClickListener {
            imageButton1.setImageResource(R.drawable.greenbutton)
            textView1.text = "1234"
            textView2.text = "1234"
        }
    }
}
0 голосов
/ 10 апреля 2019

удалить этот импорт

import kotlinx.android.synthetic.main.activity_main.view.*

Надеюсь, это сработает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...