Как включить привязку данных с помощью Kotlin в последней версии Android Studio? ⇐ Android
-
Гость
Как включить привязку данных с помощью Kotlin в последней версии Android Studio?
Пожалуйста, помогите мне, так как я студент. Я только начал изучать разработку под Android, посмотрев видео на YouTube. но ему 2 года. Итак, помогите мне исправить функцию привязки данных!
Я получаю эту ошибку везде:
Неразрешенная ссылка: привязка данных
MainActivity.kt
пакет com.example.navigationapp импортировать androidx.appcompat.app.AppCompatActivity импортировать android.os.Bundle импортировать androidx.databinding.DataBindingUtil импортировать com.example.navigationapp.databinding.ActivityMainBinding класс MainActivity : AppCompatActivity() { переопределить fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView (R.layout.activity_main) @Suppress("НЕИСПОЛЬЗУЕМАЯ_ПЕРЕМЕННАЯ") привязка val = DataBindingUtil.setContentView(this, R.layout.activity_main) } } build.gradle (:app)
плагины { идентификатор 'com.android.application' идентификатор 'котлин-андроид' } андроид { скомпилироватьSdkVersion 33 buildToolsVersion "31.0.0" defaultConfig { идентификатор приложения "com.example.android.navigation" minSdkВерсия 19 targetSdkVersion 33 Код версии 1 Имя версии "1.0" VectorDrawables.useSupportLibrary = true testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } типы сборки { выпускать { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } компиляцияварианты { исходная совместимость JavaVersion.VERSION_1_8 целевая совместимость JavaVersion.VERSION_1_8 } котлинОпции { jvmTarget = '1,8' } } зависимости { реализация «androidx.core:core-ktx:1.6.0» реализация 'androidx.appcompat:appcompat:1.3.1' реализация 'com.google.android.material:material:1.4.0' реализация 'androidx.constraintlayout:constraintlayout:2.0.4' реализация «androidx.legacy:legacy-support-v4:1.0.0» testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' } build.gradle (приложение навигации) -> (это файл проекта)
// Файл сборки верхнего уровня, куда вы можете добавить параметры конфигурации, общие для всех подпроектов/модулей. сценарий сборки { репозитории { Google() mavenCentral() } зависимости { путь к классам "com.android.tools.build:gradle:7.2.2" путь к классам 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.10' // ПРИМЕЧАНИЕ. Не размещайте здесь зависимости вашего приложения; они принадлежат // в файлах build.gradle отдельного модуля } } всепроекты { репозитории { } } задача очистить (тип: Удалить) { удалить rootProject.buildDir } GameFragment.kt
пакет com.example.android.navigation импортировать android.os.Bundle импортировать android.view.LayoutInflater импортировать android.view.View импортировать android.view.ViewGroup импортировать androidx.appcompat.app.AppCompatActivity импортировать androidx.databinding.DataBindingUtil импортировать androidx.fragment.app.Fragment импортировать com.example.android.navigation.databinding.FragmentGameBinding импортировать com.example.navigationapp.R импортировать com.example.navigationapp.databinding.FragmentGameBinding класс GameFragment : Fragment() { класс данных Вопрос( val текст: Строка, val отвечает: List) //Первый ответ правильный. Мы рандомизируем ответы перед показом текста. // На все вопросы должно быть четыре ответа. Мы бы хотели, чтобы они содержали ссылки на строку // ресурсы, чтобы мы могли интернационализироваться. (или еще лучше не определять вопросы в коде...) частные вопросы val: MutableList = mutableListOf( Вопрос(текст = "Что такое Android Jetpack?", ответы = listOf("все это", "инструменты", "документация", "библиотеки")), Вопрос(текст = "Базовый класс для макета?", ответы = listOf("ViewGroup", "ViewSet", "ViewCollection", "ViewRoot")), Вопрос(текст = "Макет для сложных экранов?", ответы = listOf("ConstraintLayout", "GridLayout", "LinearLayout", "FrameLayout")), Вопрос(текст = "Помещаем структурированные данные в макет?", ответы = listOf("Привязка данных", "Передача данных", "Задать текст", "По клику")), Вопрос(текст = "Раздуть макет фрагментами?", ответы = listOf("onCreateView", "onViewCreated", "onCreateLayout", "onInflateLayout")), Вопрос(текст = "Сборка системы для Android?", Answers = listOf("Gradle", "Graddle", "Grodle", "Groyle")), Вопрос(text = "Векторный формат Android?", ответы = listOf("VectorDrawable", "AndroidVectorDrawable", "DrawableVector", "AndroidVector")), Вопрос(текст = "Компонент навигации Android?", ответы = listOf("NavController", "NavCentral", "NavMaster", "NavSwitcher")), Вопрос(текст = "Регистрирует приложение в лаунчере?", ответы = listOf("intent-filter", "app-register", "launcher-register", "app-launcher")), Вопрос(текст = "Отметить макет для привязки данных?", ответы = listOf("", "", "", "")) ) lateinit var currentВопрос: Вопрос lateinit var отвечает: MutableList частный вар вопросИндекс = 0 частный val numQuestions = Math.min((questions.size + 1) / 2, 3) переопределить удовольствие onCreateView (инфлятор: LayoutInflater, контейнер: ViewGroup?, saveInstanceState: Bundle?): Посмотреть? { // Раздуваем макет для этого фрагмента val привязка = DataBindingUtil.inflate( инфлятор, R.layout.fragment_game, контейнер, ложь) // Перетасовывает вопросы и устанавливает индекс вопроса на первый вопрос. рандомизироватьВопросы() // Привязываем этот класс фрагмента к макету привязка.game = это // Устанавливаем onClickListener для submitButton привязка.submitButton.setOnClickListener @Suppress("UNUSED_ANONYMOUS_PARAMETER") { просмотр: Просмотр -> val CheckId =binding.questionRadioGroup.checkedRadioButtonId // Ничего не делать, если ничего не отмечено (id == -1) если (-1 != проверенный идентификатор) { вар ответИндекс = 0 когда (checkedId) { R.id. SecondAnswerRadioButton -> answerIndex = 1 R.id. ThirdAnswerRadioButton -> answerIndex = 2 R.id.fourthAnswerRadioButton -> answerIndex = 3 } // Первый ответ в исходном вопросе всегда правильный, поэтому если наш // ответ совпадает, у нас есть правильный ответ. if (ответы[ответИндекс] == текущийВопрос.ответы[0]) { вопросИндекс++ // Переход к следующему вопросу если (questionIndex
Пожалуйста, помогите мне, так как я студент. Я только начал изучать разработку под Android, посмотрев видео на YouTube. но ему 2 года. Итак, помогите мне исправить функцию привязки данных!
Я получаю эту ошибку везде:
Неразрешенная ссылка: привязка данных
MainActivity.kt
пакет com.example.navigationapp импортировать androidx.appcompat.app.AppCompatActivity импортировать android.os.Bundle импортировать androidx.databinding.DataBindingUtil импортировать com.example.navigationapp.databinding.ActivityMainBinding класс MainActivity : AppCompatActivity() { переопределить fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView (R.layout.activity_main) @Suppress("НЕИСПОЛЬЗУЕМАЯ_ПЕРЕМЕННАЯ") привязка val = DataBindingUtil.setContentView(this, R.layout.activity_main) } } build.gradle (:app)
плагины { идентификатор 'com.android.application' идентификатор 'котлин-андроид' } андроид { скомпилироватьSdkVersion 33 buildToolsVersion "31.0.0" defaultConfig { идентификатор приложения "com.example.android.navigation" minSdkВерсия 19 targetSdkVersion 33 Код версии 1 Имя версии "1.0" VectorDrawables.useSupportLibrary = true testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } типы сборки { выпускать { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } компиляцияварианты { исходная совместимость JavaVersion.VERSION_1_8 целевая совместимость JavaVersion.VERSION_1_8 } котлинОпции { jvmTarget = '1,8' } } зависимости { реализация «androidx.core:core-ktx:1.6.0» реализация 'androidx.appcompat:appcompat:1.3.1' реализация 'com.google.android.material:material:1.4.0' реализация 'androidx.constraintlayout:constraintlayout:2.0.4' реализация «androidx.legacy:legacy-support-v4:1.0.0» testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' } build.gradle (приложение навигации) -> (это файл проекта)
// Файл сборки верхнего уровня, куда вы можете добавить параметры конфигурации, общие для всех подпроектов/модулей. сценарий сборки { репозитории { Google() mavenCentral() } зависимости { путь к классам "com.android.tools.build:gradle:7.2.2" путь к классам 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.10' // ПРИМЕЧАНИЕ. Не размещайте здесь зависимости вашего приложения; они принадлежат // в файлах build.gradle отдельного модуля } } всепроекты { репозитории { } } задача очистить (тип: Удалить) { удалить rootProject.buildDir } GameFragment.kt
пакет com.example.android.navigation импортировать android.os.Bundle импортировать android.view.LayoutInflater импортировать android.view.View импортировать android.view.ViewGroup импортировать androidx.appcompat.app.AppCompatActivity импортировать androidx.databinding.DataBindingUtil импортировать androidx.fragment.app.Fragment импортировать com.example.android.navigation.databinding.FragmentGameBinding импортировать com.example.navigationapp.R импортировать com.example.navigationapp.databinding.FragmentGameBinding класс GameFragment : Fragment() { класс данных Вопрос( val текст: Строка, val отвечает: List) //Первый ответ правильный. Мы рандомизируем ответы перед показом текста. // На все вопросы должно быть четыре ответа. Мы бы хотели, чтобы они содержали ссылки на строку // ресурсы, чтобы мы могли интернационализироваться. (или еще лучше не определять вопросы в коде...) частные вопросы val: MutableList = mutableListOf( Вопрос(текст = "Что такое Android Jetpack?", ответы = listOf("все это", "инструменты", "документация", "библиотеки")), Вопрос(текст = "Базовый класс для макета?", ответы = listOf("ViewGroup", "ViewSet", "ViewCollection", "ViewRoot")), Вопрос(текст = "Макет для сложных экранов?", ответы = listOf("ConstraintLayout", "GridLayout", "LinearLayout", "FrameLayout")), Вопрос(текст = "Помещаем структурированные данные в макет?", ответы = listOf("Привязка данных", "Передача данных", "Задать текст", "По клику")), Вопрос(текст = "Раздуть макет фрагментами?", ответы = listOf("onCreateView", "onViewCreated", "onCreateLayout", "onInflateLayout")), Вопрос(текст = "Сборка системы для Android?", Answers = listOf("Gradle", "Graddle", "Grodle", "Groyle")), Вопрос(text = "Векторный формат Android?", ответы = listOf("VectorDrawable", "AndroidVectorDrawable", "DrawableVector", "AndroidVector")), Вопрос(текст = "Компонент навигации Android?", ответы = listOf("NavController", "NavCentral", "NavMaster", "NavSwitcher")), Вопрос(текст = "Регистрирует приложение в лаунчере?", ответы = listOf("intent-filter", "app-register", "launcher-register", "app-launcher")), Вопрос(текст = "Отметить макет для привязки данных?", ответы = listOf("", "", "", "")) ) lateinit var currentВопрос: Вопрос lateinit var отвечает: MutableList частный вар вопросИндекс = 0 частный val numQuestions = Math.min((questions.size + 1) / 2, 3) переопределить удовольствие onCreateView (инфлятор: LayoutInflater, контейнер: ViewGroup?, saveInstanceState: Bundle?): Посмотреть? { // Раздуваем макет для этого фрагмента val привязка = DataBindingUtil.inflate( инфлятор, R.layout.fragment_game, контейнер, ложь) // Перетасовывает вопросы и устанавливает индекс вопроса на первый вопрос. рандомизироватьВопросы() // Привязываем этот класс фрагмента к макету привязка.game = это // Устанавливаем onClickListener для submitButton привязка.submitButton.setOnClickListener @Suppress("UNUSED_ANONYMOUS_PARAMETER") { просмотр: Просмотр -> val CheckId =binding.questionRadioGroup.checkedRadioButtonId // Ничего не делать, если ничего не отмечено (id == -1) если (-1 != проверенный идентификатор) { вар ответИндекс = 0 когда (checkedId) { R.id. SecondAnswerRadioButton -> answerIndex = 1 R.id. ThirdAnswerRadioButton -> answerIndex = 2 R.id.fourthAnswerRadioButton -> answerIndex = 3 } // Первый ответ в исходном вопросе всегда правильный, поэтому если наш // ответ совпадает, у нас есть правильный ответ. if (ответы[ответИндекс] == текущийВопрос.ответы[0]) { вопросИндекс++ // Переход к следующему вопросу если (questionIndex
Мобильная версия