Reputation: 35
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
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