请帮帮我,因为我是个学生。我刚开始通过观看Youtube视频来学习Android开发。但它已经两岁了。所以,请帮助我修复数据绑定功能!
我发现这个错误到处都是:
未解析引用:绑定
MainActivity.kt
package com.example.navigationapp
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.databinding.DataBindingUtil
import com.example.navigationapp.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
@Suppress("UNUSED_VARIABLE")
val binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
}
}build.gradle (:app)
plugins {
id 'com.android.application'
id 'kotlin-android'
}
android {
compileSdkVersion 33
buildToolsVersion "31.0.0"
defaultConfig {
applicationId "com.example.android.navigation"
minSdkVersion 19
targetSdkVersion 33
versionCode 1
versionName "1.0"
vectorDrawables.useSupportLibrary = true
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
}
dependencies {
implementation 'androidx.core:core-ktx:1.6.0'
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation '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 (导航应用程序) -> (这个是项目文件)
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:7.2.2"
classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.10'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}GameFragment.kt
package com.example.android.navigation
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AppCompatActivity
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.Fragment
import com.example.android.navigation.databinding.FragmentGameBinding
import com.example.navigationapp.R
import com.example.navigationapp.databinding.FragmentGameBinding
class GameFragment : Fragment() {
data class Question(
val text: String,
val answers: List<String>)
// The first answer is the correct one. We randomize the answers before showing the text.
// All questions must have four answers. We'd want these to contain references to string
// resources so we could internationalize. (or better yet, not define the questions in code...)
private val questions: MutableList<Question> = mutableListOf(
Question(text = "What is Android Jetpack?",
answers = listOf("all of these", "tools", "documentation", "libraries")),
Question(text = "Base class for Layout?",
answers = listOf("ViewGroup", "ViewSet", "ViewCollection", "ViewRoot")),
Question(text = "Layout for complex Screens?",
answers = listOf("ConstraintLayout", "GridLayout", "LinearLayout", "FrameLayout")),
Question(text = "Pushing structured data into a Layout?",
answers = listOf("Data Binding", "Data Pushing", "Set Text", "OnClick")),
Question(text = "Inflate layout in fragments?",
answers = listOf("onCreateView", "onViewCreated", "onCreateLayout", "onInflateLayout")),
Question(text = "Build system for Android?",
answers = listOf("Gradle", "Graddle", "Grodle", "Groyle")),
Question(text = "Android vector format?",
answers = listOf("VectorDrawable", "AndroidVectorDrawable", "DrawableVector", "AndroidVector")),
Question(text = "Android Navigation Component?",
answers = listOf("NavController", "NavCentral", "NavMaster", "NavSwitcher")),
Question(text = "Registers app with launcher?",
answers = listOf("intent-filter", "app-registry", "launcher-registry", "app-launcher")),
Question(text = "Mark a layout for Data Binding?",
answers = listOf("<layout>", "<binding>", "<data-binding>", "<dbinding>"))
)
lateinit var currentQuestion: Question
lateinit var answers: MutableList<String>
private var questionIndex = 0
private val numQuestions = Math.min((questions.size + 1) / 2, 3)
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
val binding = DataBindingUtil.inflate<FragmentGameBinding>(
inflater, R.layout.fragment_game, container, false)
// Shuffles the questions and sets the question index to the first question.
randomizeQuestions()
// Bind this fragment class to the layout
binding.game = this
// Set the onClickListener for the submitButton
binding.submitButton.setOnClickListener @Suppress("UNUSED_ANONYMOUS_PARAMETER")
{ view: View ->
val checkedId = binding.questionRadioGroup.checkedRadioButtonId
// Do nothing if nothing is checked (id == -1)
if (-1 != checkedId) {
var answerIndex = 0
when (checkedId) {
R.id.secondAnswerRadioButton -> answerIndex = 1
R.id.thirdAnswerRadioButton -> answerIndex = 2
R.id.fourthAnswerRadioButton -> answerIndex = 3
}
// The first answer in the original question is always the correct one, so if our
// answer matches, we have the correct answer.
if (answers[answerIndex] == currentQuestion.answers[0]) {
questionIndex++
// Advance to the next question
if (questionIndex < numQuestions) {
currentQuestion = questions[questionIndex]
setQuestion()
binding.invalidateAll()
} else {
// We've won! Navigate to the gameWonFragment.
}
} else {
// Game over! A wrong answer sends us to the gameOverFragment.
}
}
}
return binding.root
}
// randomize the questions and set the first question
private fun randomizeQuestions() {
questions.shuffle()
questionIndex = 0
setQuestion()
}
// Sets the question and randomizes the answers. This only changes the data, not the UI.
// Calling invalidateAll on the FragmentGameBinding updates the data.
private fun setQuestion() {
currentQuestion = questions[questionIndex]
// randomize the answers into a copy of the array
answers = currentQuestion.answers.toMutableList()
// and shuffle them
answers.shuffle()
(activity as AppCompatActivity).supportActionBar?.title = getString(R.string.title_android_trivia_question, questionIndex + 1, numQuestions)
}
}GameOverFragment.kt
package com.example.android.navigation
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.Fragment
import com.example.android.navigation.databinding.FragmentGameOverBinding
import com.example.navigationapp.R
class GameOverFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
val binding: FragmentGameOverBinding = DataBindingUtil.inflate(
inflater, R.layout.fragment_game_over, container, false)
return binding.root
}
}GameWonFragment.kt
package com.example.android.navigation
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.Fragment
import com.example.android.navigation.databinding.FragmentGameWonBinding
import com.example.navigationapp.R
class GameWonFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
val binding: FragmentGameWonBinding = DataBindingUtil.inflate(
inflater, R.layout.fragment_game_won, container, false)
return binding.root
}
}发布于 2022-08-18 15:27:45
要启用数据库,只需添加:
plugins {
id 'com.android.application'
id 'kotlin-android'
}
android {
compileSdkVersion 33
buildToolsVersion "31.0.0"
defaultConfig {
applicationId "com.example.android.navigation"
minSdkVersion 19
targetSdkVersion 33
versionCode 1
versionName "1.0"
vectorDrawables.useSupportLibrary = true
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
dataBinding {
enabled true
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
}
dependencies {
implementation 'androidx.core:core-ktx:1.6.0'
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation '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'
}或者你可以用
plugins {
id 'com.android.application'
id 'kotlin-android'
}
android {
compileSdkVersion 33
buildToolsVersion "31.0.0"
defaultConfig {
applicationId "com.example.android.navigation"
minSdkVersion 19
targetSdkVersion 33
versionCode 1
versionName "1.0"
vectorDrawables.useSupportLibrary = true
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
buildFeatures{
dataBinding = true
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
}
dependencies {
implementation 'androidx.core:core-ktx:1.6.0'
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation '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'
}两种方法都应该可以工作,在添加了清理和重建项目之后,这应该会自动生成所有必需的类(例如: ActivityMainBinding)。
https://stackoverflow.com/questions/73403069
复制相似问题