web-dev-qa-db-ja.com

リスナーバインディング。セッターが見つかりません

listener bindings を実装しようとしていますが、コードを実行すると次のエラーが発生します。

Caused by: Android.databinding.tool.util.LoggedErrorException: Found data binding errors.
****/ data binding error ****msg:Cannot find the setter for attribute 'Android:onClick' with parameter type lambda on Android.widget.Button. file:~/GithubBrowser/app/src/main/res/layout/loading_state.xml loc:30:31 - 30:52 ****\ data binding error ****

これは問題のレイアウトファイルです。

<?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">

    <data>
        <import type="com.example.app.data.model.Resource"/>
        <import type="com.example.app.data.model.Status"/>
        <variable name="resource" type="Resource"/>
        <variable name="callback" type="com.example.app.ui.common.RetryCallback"/>
    </data>

    <LinearLayout
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:orientation="vertical"
        Android:gravity="center"
        Android:padding="@dimen/default_margin">

        <Button Android:id="@+id/retry"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:text="@string/retry"
            Android:onClick="@{() -> callback.retry()}"/>

    </LinearLayout>

</layout>

そして、これはレイアウトで参照されるRetryCallbackインターフェースです:

package com.example.app.ui.common

interface RetryCallback {

    fun retry()

}

編集

トップレベルbuild.gradle

buildscript {
    ext.Android_tools_version = '3.0.0-alpha3'
    ext.kotlin_version = '1.1.2-5'
    repositories {
        maven { url 'https://maven.google.com' }
        jcenter()
    }
    dependencies {
        classpath "com.Android.tools.build:gradle:$Android_tools_version"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

ext {
    architecture_version = '1.0.0-alpha2'
    constraint_version = '1.0.2'
    dagger_version = '2.11'
    espresso_version = '2.2.2'
    glide_version = '3.7.0'
    junit_version = '4.12'
    mockito_version = '2.7.19'
    mock_server_version = '3.6.0'
    moshi_version = '1.5.0'
    retrofit_version = '2.2.0'
    support_version = '25.4.0'
    timber_version = '4.5.1'
}

allprojects {
    repositories {
        jcenter()
        mavenCentral()
        maven { url 'https://maven.google.com' }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

アプリモジュールbuild.gradle

apply plugin: 'com.Android.application'
apply plugin: 'kotlin-Android'
apply plugin: 'kotlin-kapt'

Android {
    compileSdkVersion 25
    buildToolsVersion "25.0.3"
    defaultConfig {
        applicationId "com.example.app"
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        debug {
            testCoverageEnabled !project.hasProperty('Android.injected.invoked.from.ide')
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
        }
    }
    dataBinding {
        enabled = true
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

kapt {
    generateStubs = true
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"

    compile "com.Android.support:appcompat-v7:$support_version"
    compile "com.Android.support:cardview-v7:$support_version"
    compile "com.Android.support:design:$support_version"
    compile "com.Android.support:recyclerview-v7:$support_version"
    compile "com.Android.support.constraint:constraint-layout:$constraint_version"

    compile "Android.Arch.lifecycle:extensions:$architecture_version"
    compile "Android.Arch.lifecycle:runtime:$architecture_version"
    compile "Android.Arch.persistence.room:runtime:$architecture_version"

    compile "com.google.dagger:dagger:$dagger_version"
    compile "com.google.dagger:dagger-Android:$dagger_version"
    compile "com.google.dagger:dagger-Android-support:$dagger_version"

    compile "com.squareup.moshi:moshi:$moshi_version"
    compile "com.squareup.retrofit2:retrofit:$retrofit_version"
    compile "com.squareup.retrofit2:converter-moshi:$retrofit_version"

    compile "com.github.bumptech.glide:glide:$glide_version"

    compile "com.jakewharton.timber:timber:$timber_version"

    kapt "com.Android.databinding:compiler:$Android_tools_version"
    kapt "com.google.dagger:dagger-Android-processor:$dagger_version"
    kapt "com.google.dagger:dagger-compiler:$dagger_version"
    kapt "Android.Arch.persistence.room:compiler:$architecture_version"
    kapt "Android.Arch.lifecycle:compiler:$architecture_version"

    testCompile "junit:junit:$junit_version"
    testCompile "com.squareup.okhttp3:mockwebserver:$mock_server_version"
    testCompile ("Android.Arch.core:core-testing:$architecture_version", {
        exclude group: 'com.Android.support', module: 'support-compat'
        exclude group: 'com.Android.support', module: 'support-annotations'
        exclude group: 'com.Android.support', module: 'support-ccore-utils'
    })

    androidTestCompile "com.Android.support:appcompat-v7:$support_version"
    androidTestCompile "com.Android.support:cardview-v7:$support_version"
    androidTestCompile "com.Android.support:design:$support_version"
    androidTestCompile "com.Android.support:recyclerview-v7:$support_version"

    androidTestCompile ("com.Android.support.test.espresso:espresso-core:$espresso_version", {
        exclude group: 'com.Android.support', module: 'support-annotations'
        exclude group: 'com.google.code.findbugs', module: 'jsr305'
    })

    androidTestCompile ("com.Android.support.test.espresso:espresso-contrib:$espresso_version", {
        exclude group: 'com.Android.support', module: 'support-annotations'
        exclude group: 'com.google.code.findbugs', module: 'jsr305'
    })

    androidTestCompile "org.mockito:mockito-Android:$mockito_version"
}
27
Bryan

私はちょうどその問題を抱えていたので、.idea、.gradle、gradleフォルダーを削除してAndroid St​​udioにgradleファイルからプロジェクト全体を最初から再作成させることで解決できました。

58
Matej Drobnič

確認してください apply plugin: 'kotlin-kapt'はbuild.gradleにあります。

これを実行していて、プロジェクトの再構築、ディレクトリの削除、AS設定のクリアは何もしません。 IDEはそれがなくても問題ありませんが、建物は失敗します。

Android studioにこれに関するより良いエラーメッセージがあれば、それは素晴らしいでしょう。

43
Kevan Swanberg

Rebuildingプロジェクトは私のために働いた。

  • Build>Rebuildからプロジェクトを再構築します
  • ビルドログを取得した場合の問題を修正します。
  • Build>Rebuildからプロジェクトを再構築します
1
Khemraj

プロジェクトを再構築するだけです。これはおそらく、リファクタリングを行ったためでしょう

1
Mladen Rakonjac

他のすべての兄弟から示唆されているように、はい。idea、.gradle、gradleフォルダーを削除すると、エラーは解決します。

(これはなぜこれが起こるのか不思議な人のためです、以下は私のユースケースです):バインディング参照を混合することでいくつかのバインディングエラーを引き起こす可能性のあるrxRecycleViewDataBindingカスタムライブラリを最近追加したため、プロジェクトでこの問題が発生したと思います。

0
Govind Tank

タイプLiveDataのメンバー変数で同様の問題が発生した場合、ビューのonClickで関数を呼び出す場合と同様に、XMLファイルのラムダをチェックします"@{() -> variableName.callMethod()}"が使用されます変数には"@{variableName.memeberVariableName}"が使用されます。

0
neer17

エラー Cannot find the setter for attributeは、指定したデータ型の変数をその属性のパラメーターとして受け入れるセッターメソッドが見つからないことを意味します。

つまり、定義したBindingAdapterメソッドが見つかりません。この問題は、BindingAdapterを使用して定義したカスタム属性にXMLレイアウトで間違ったデータ型を提供していたために発生しました。カスタム属性に正しいデータ型を指定すると、機能しました。

そのため、BindingAdaptersを使用して定義したカスタム属性に正しいデータ型を提供しているかどうかを確認してください。

0

有効なケース:このエラーは、xmlファイルにエラーがある場合に発生します。最初にxmlを注意深く読み、問題が見つかった場合は修正してください。

無効なケース:私にとって、プロジェクトから既に削除されたファイルまたはファイルの名前が変更され、データバインディングが古いファイルを参照していたファイルで問題が発生しました。

毎回問題を解決する方法がわかりませんが、私はいくつかのことがあります。

修正番号1:

プロジェクトルートで「gradle wrapper」を実行しています。

修正番号2:

Android Studio Clean Project

次に、プロジェクトルートでこれらのフォルダーを削除します。

rm -rf .gradle /

rm -rf app/build /

rm -rfビルド

rm -rf gradle

rm -rf gradlew

Android Studioの無効化と再起動

すべてが正常に戻ります。

0
noev
  1. .gradleフォルダーを削除します。
  2. プロジェクトを実行します。
  3. プロジェクトをきれいにします。
  4. プロジェクトを実行します。

私のために働きます。注文が混ざっていたり、見逃したりした場合、それは私には機能しません。

0
tanshiwei