#java #android #kotlin
#java #Android #kotlin
Вопрос:
Привет, коллеги-программисты!
я пытаюсь вызвать элемент из моего XML-файла пример: «Кнопка» из моего activity.xml но MainActivity.kt не разрешает мой идентификатор, когда я пытаюсь вызвать его внутри кода, который я пытался очистить и перестроить проект, но все еще сталкиваюсь с проблемой, также приводящей к аннулированию перезапуска кэшей
вот так я хочу вызвать кнопку из моего acitivty_main.xml
button.setOnClickListener{ }
MainActivity
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.mostafa.stringlength.R.id.editText
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
кнопка.(я здесь пытаюсь вызвать кнопку), но мне ничего не показывает //
}
}
активность XML :
<?xml version="1.0" encoding="utf-8"?>
<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">
<Button
android:id="@ id/button"
android:layout_width="138dp"
android:layout_height="58dp"
android:layout_marginStart="136dp"
android:layout_marginEnd="137dp"
android:layout_marginBottom="212dp"
android:text="أظهار النتيجة"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent" />
<EditText
android:id="@ id/editText"
android:layout_width="411dp"
android:layout_height="360dp"
android:layout_marginStart="43dp"
android:layout_marginTop="44dp"
android:layout_marginEnd="43dp"
android:ems="10"
android:inputType="textPersonName"
android:text="ادخل النص هنا"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:layout_width="417dp"
android:layout_height="195dp"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@ id/result"
android:text="النتائج:"/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
Комментарии:
1. Я не думаю, что вы можете использовать синтетический импорт в качестве переменной поля, попробуйте переместить его внутри
onCreate
метода2. ничего не изменилось
Ответ №1:
Убедитесь, что у вас есть эти 2 строки в верхней части вашего файла gradle
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
и поместите
import kotlinx.android.synthetic.main.activity_main.*
в вашем файле активности
Ответ №2:
Теперь раздел плагинов выглядит следующим образом:
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'kotlin-android-extensions'
}
Комментарии:
1. Это работает, но теперь оно устарело!!
Ответ №3:
Расширения Kotlin для Android устарели. Вы можете использовать привязку данных или привязку просмотра, предлагаемую Jetpack.
Вам просто нужно включить эти строки в файл build.gradle вашего модуля:
android {
...
buildFeatures {
viewBinding true
}
}
Будет сгенерирован объект привязки, основанный на вашем имени действия, например, MainActivity сгенерирует ActivityMainBinding
private lateinit var binding: ActivityMainBinding
Теперь вы можете использовать эту переменную привязки для расширения представления и ссылки на представления в макете:
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
binding.result.text = "My “Result!"
}
}
Ответ №4:
Добавьте следующий оператор импорта вверху
import kotlinx.android.synthetic.main. activity_main.*
Ответ №5:
Существует лучший способ, называемый привязкой представления. Это значительно упрощает задачу. Когда вы используете его, вам это не понадобится 'kotlin-android-extensions'
.
https://developer.android.com/topic/libraries/view-binding#java
Ответ №6:
Пример решения
val btn_start = findViewById<Button>(R.id.btnStart)
btn_start.setOnClickListener{
//Your code
}