#android #xml #android-studio #android-layout #kotlin
#Android #xml #android-studio #android-макет #kotlin
Вопрос:
Я пытаюсь запустить приложение для Android в kotlin. Но Mainactivity.kt не распознает идентификатор в Android studio kotlin.
Я перепробовал много способов сделать это, чтобы устранить эту ошибку. я даже попытался зайти в build и нажать «Очистить проект», затем «перестроить проекты».
но ошибка не сдвинулась с места, она все еще существует. я ввел идентификатор TextView в MainActivity.kt, но он по-прежнему отображается красным!
как я могу это решить, пожалуйста, помогите!
Комментарии:
1. Вы пытались запустить приложение? Пожалуйста, поделитесь своим logcat
2. Импортировали ли вы соответствующий файл макета вашей активности? Вот так:
import kotlinx.android.synthetic.main.your_layout_file_name.*
3. @mayank1513 сэр, я попытался запустить приложение, оно показывает неразрешенную ссылку.
4. @SoumikBhattacharjee при импорте в Kotlinx отображается ошибка в Mainactivity
Ответ №1:
kotlin synthetic
больше не доступно. В Kotlin 1.4.20-M2
JetBrains устаревший плагин компилятора расширений Kotlin для Android. вместо этого используйте findViewById
или ViewBinding
для получения дополнительной информации проверьте эту проблему также проверьте эту фиксацию
Комментарии:
1. Пожалуйста, отправьте соответствующий источник
Ответ №2:
Я протестировал код для Kotlin версии 1.4.1, и он отлично работал.
Чтобы устранить вашу ошибку, вы можете использовать val tv:TextView = findViewById(R.id.tv_content)
и использовать tv в своем коде.
Второй вариант заключается в том, что вы classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.20"
в своем файле build.gradle для classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.10"
Как указано @Jimale Abdi —
kotlinx.android.synthetic больше не является рекомендуемой практикой. Удаление в пользу явного findViewById.
Надеюсь, это поможет.
Ответ №3:
Вам необходимо использовать findViewById()
Объявите tv_content
переменную в своем классе:
private lateinit var tv_content: TextView
В onCreate добавить:
tv_content = findViewById(R.id.tv_content)
Теперь в вашей Update
функции вы можете вызвать:
tv_content.text = "Text you want to set"
Комментарии:
1. где находится функция обновления, можете ли вы мне сказать?
Ответ №4:
убедитесь, что добавлен плагин kotlin(«android.extensions») для build.gradle(Module)
Ответ №5:
Лучший способ сделать это — использовать привязку данных. Выполните следующие действия
- Добавьте привязку данных в сценарий Gradle >>> build.gradle(модуль.YourAppName.app)
release {
........
........
}
}
//add your code here
dataBinding{
enabled = true
}
- Синхронизируйте проект
- добавьте тег <layout> в activity_main.xml планировка
<layout
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">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@ id/tv_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize= "30sp"/>
</LinearLayout>
</layout>
- В MainActicity.kt добавьте код привязки данных
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding //binding variable
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_news) //binding content view
}
fun update(view: View){
binding.tv_content.text = "your text goes here" //apply the binding to text
}
}
Наслаждайтесь 🙂
Ответ №6:
просто откройте файл приложения для сборки gradle. и замените ваши плагины на
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'kotlin-android-extensions'
}