Bahadir Erdem
Bahadir Erdem

Reputation: 35

Databinding: "unresolved reference" for variable name

enter image description hereenter image description here

I cannot usage databinding for activity. (I used databinding for fragment/recyclerview).

I researched all documents and all issues but it didn't solve my problem.

My problem is "unresolved reference" for variable name in xml file. Where is the problem in my project.

DetailActivity.kt

class DetailActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val activityMainBinding: ActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_detail)
        val model: Result = intent.getSerializableExtra("movieModel") as Result
        activityMainBinding.setResult = model
    }
} 

activity_detail.xml

<?xml version="1.0" encoding="utf-8"?>
<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">

    <data>
        <variable
            name="result"
            type="com.bahadirerdem.moviescatalog.model.responseModel.Result" />
    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".view.activity.DetailActivity" >

        <androidx.constraintlayout.widget.Guideline
            android:id="@+id/guideline4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            app:layout_constraintGuide_percent="0.32" />

        <ImageView
            android:id="@+id/movie_banner"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:scaleType="centerCrop"
            android:downloadUrl="@{result.backdrop_path}"
            app:layout_constraintBottom_toTopOf="@+id/guideline4"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            tools:src="@tools:sample/backgrounds/scenic" />

        <TextView
            android:id="@+id/movie_desc_textview"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:layout_marginEnd="8dp"
            android:scrollbars="vertical"
            android:text="@{result.overview}"
            app:layout_constraintBottom_toTopOf="@+id/bottom_constraint"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="@+id/guideline4" />

        <TextView
            android:id="@+id/movie_title_textview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:layout_marginBottom="8dp"
            android:text="@{result.title}"
            app:layout_constraintBottom_toTopOf="@+id/rating_textview"
            app:layout_constraintStart_toStartOf="parent" />

        <TextView
            android:id="@+id/rating_textview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:layout_marginBottom="4dp"
            android:gravity="center_horizontal"
            android:text="@{result.vote_count}"
            app:drawableLeftCompat="@drawable/ic_favorite"
            app:layout_constraintBottom_toTopOf="@+id/guideline4"
            app:layout_constraintStart_toStartOf="parent" />

        <TextView
            android:id="@+id/date_textview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginEnd="8dp"
            android:layout_marginBottom="4dp"
            android:text="@{result.release_date}"
            android:textColor="@color/white"
            app:drawableRightCompat="@drawable/ic_watchlist"
            app:layout_constraintBottom_toTopOf="@+id/guideline4"
            app:layout_constraintEnd_toEndOf="parent" />

        <androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/bottom_constraint"
            android:layout_width="0dp"
            android:layout_height="56dp"
            android:layout_marginStart="8dp"
            android:layout_marginEnd="8dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent">

            <ImageView
                android:id="@+id/imageView2"
                android:layout_width="32dp"
                android:layout_height="32dp"
                android:layout_marginStart="8dp"
                android:src="@drawable/ic_favorite"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintStart_toEndOf="@+id/imageView3"
                app:layout_constraintTop_toTopOf="parent" />

            <ImageView
                android:id="@+id/imageView3"
                android:layout_width="32dp"
                android:layout_height="32dp"
                android:src="@drawable/ic_watchlist"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent" />
        </androidx.constraintlayout.widget.ConstraintLayout>
    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

build.gradle(app)

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-android-extensions'
    id 'androidx.navigation.safeargs.kotlin'
    id 'kotlin-kapt'
}
android {
    compileSdkVersion 29
    buildToolsVersion "30.0.3"

    defaultConfig {
        applicationId "com.bahadirerdem.moviescatalog"
        minSdkVersion 19
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
        multiDexEnabled true

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    dataBinding{
        enabled = true
    }

    kapt {
        generateStubs = true
    }

    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 {
    def lifeCycleExtensionVersion = '1.1.1'
    def retrofitVersion = '2.3.0'
    def glideVersion = '4.11.0'
    def rxJavaVersion = '2.1.1'

    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation 'androidx.core:core-ktx:1.3.2'
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'com.google.android.material:material:1.3.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation 'com.android.support:multidex:1.0.3'

    implementation 'androidx.navigation:navigation-fragment-ktx:2.3.4'
    implementation 'androidx.navigation:navigation-ui-ktx:2.3.4'

    implementation "com.squareup.retrofit2:retrofit:$retrofitVersion"
    implementation "com.squareup.retrofit2:converter-gson:$retrofitVersion"
    implementation "com.squareup.retrofit2:adapter-rxjava2:$retrofitVersion"

    implementation "io.reactivex.rxjava2:rxjava:$rxJavaVersion"
    implementation "io.reactivex.rxjava2:rxandroid:$rxJavaVersion"

    implementation "com.github.bumptech.glide:glide:$glideVersion"

    implementation "android.arch.lifecycle:extensions:$lifeCycleExtensionVersion"
    
    kapt "com.android.databinding:compiler:3.1.4"

    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}

I've tried clean project, rebuild project, invalidate cache and restart but not solve my problem where am I doing wrong? Help me...

Upvotes: 2

Views: 736

Answers (1)

Zain
Zain

Reputation: 40810

The problem is that you reference a binding class of the MainActivity which is (ActivityMainBinding) to the DetailActivity.

Therefore, it can't find a setResult() method in the ActivityMainBinding, because there is no result variable in activity_main.xml layout.

Notice that each activity has a unique generated class that bounds to its own layout.

To fix this you need to replace ActivityMainBinding with ActivityDetailBinding

class DetailActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val activityDetailBinding: ActivityDetailBinding = DataBindingUtil.setContentView(this, R.layout.activity_detail)
        val model: Result = intent.getSerializableExtra("movieModel") as Result
        activityDetailBinding.setResult = model
    }
} 

Upvotes: 1

Related Questions