web-dev-qa-db-ja.com

Kotlin-Android:未解決の参照データバインディング

新しいデータバインディングライブラリを使用して、Javaで記述された次のフラグメントクラスがあります

import com.example.app.databinding.FragmentDataBdinding;

public class DataFragment extends Fragment {

    @Nullable
    private FragmentDataBinding mBinding;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_data, container, false);
        return mBinding.getRoot();
    }
}

コンパイルして正常に動作します。
Kotlinで書き直そうとしましたが、次のように思いつきました。

import com.example.app.databinding.FragmentDataBdinding

class ProfileFragment : Fragment() {

    private var mBinding: FragmentDataBinding? = null

    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_data, container, false)
        return mBinding!!.getRoot()
    }
}

しかし、現在、ステップ:app:compileDebugKotlinは次を出力します。

エラー:(16、38)未解決の参照:データバインディング
エラー:(37、27)未解決の参照:FragmentDataBinding

KotlinでAndroidデータバインディングライブラリを使用するにはどうすればよいですか?

私のトップレベルbuild.gradle

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.Android.tools.build:gradle:1.3.0'
        classpath 'com.Android.databinding:dataBinder:1.0-rc4'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

アプリディレクトリ内のbuild.gradle(関連する部分のみ):

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

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

buildscript {
    ext.kotlin_version = '0.14.451'
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-Android-extensions:$kotlin_version"
    }
}
repositories {
    mavenCentral()
    maven {
        url 'http://oss.sonatype.org/content/repositories/snapshots'
    }
}

Android St​​udio 1.4、ビルドツールバージョン23.0.1、Android SDK 23、SDKツール24.4.0を使用しています

123
Mikhail

この構成を使用してみてください。

メインでbuild.gradle

buildscript {
    ext.kotlin_version = '<kotlin-version>'
    ext.Android_plugin_version = '2.2.0-alpha4'
    dependencies {
        classpath "com.Android.tools.build:gradle:$Android_plugin_version"
    //... rest of the content
    }
}

アプリbuild.gradle

Android {
    dataBinding {
        enabled = true
    }
}

dependencies {
    kapt "com.Android.databinding:compiler:$Android_plugin_version"
}

kapt {
    generateStubs = true
}
83
lrampazzo

私は新しい解決策を見つけました。それがあなたに役立つことを願っています。

まず、プラグインが適用されているかどうかを確認します。

apply plugin: 'kotlin-kapt'

それから

Android {
    ...
    ...
    dataBinding {
        enabled = true
    }
    ...
    ...
}

依存関係にエラーがある可能性があります。

USE

kapt 'com.Android.databinding:compiler:3.0.1'

代わりに

compile 'com.Android.databinding:compiler:3.0.1'

ありがとうございました。

データバインディングコンパイラのバージョンは、プロジェクトのbuild.gradleファイルのgradleバージョンと同じです。

// at the top of file 
apply plugin: 'kotlin-kapt'


Android {
  dataBinding.enabled = true
}

dependencies {
  kapt "com.Android.databinding:compiler:3.0.0-beta1"
}

そしてgradleバージョンは

classpath 'com.Android.tools.build:gradle:3.0.0-beta1'

以下は、kotlinでデータバインディングライブラリの使用を完了するためのリンク例です。

https://proandroiddev.com/modern-Android-development-with-kotlin-september-2017-part-1-f976483f7bd6

11
Sijansd

更新2:これは本当に古い答えです。代わりにlrampazzoの答えを参照してください。

1.0-rc4で動作します。

kapt 'com.Android.databinding:compiler:1.0-rc4' 

あなたの依存関係に

Ghedeon、コメントへのリンクをありがとう

UpdateHere's 本当にシンプルなハローワールドのサンプルプロジェクト

11
Jaydeep

問題を解決するには、あなたが置く必要があります

apply plugin: 'kotlin-kapt'

build.gradleの先頭(モジュール:アプリ)で、この行を依存関係に配置します

kapt "com.Android.databinding:compiler:[YOUR_Android_PLUGIN_VERSION]"

メニューに移動して、Androidプラグインのバージョンを見つけることができます

File > Project Structure > Project

その後、再度同期します。この警告が表示された場合、無視してください。

サードパーティのGradleプラグインが原因の可能性があります

6
Sowattana Sigen

Andrid studio 2.0(2.1)をお試しください

build.gradle

Android{
   dataBinding {
        enabled = true
    }
...
}
dependencies {
 kapt 'com.Android.databinding:compiler:2.0.0-rc1'
....
}

kapt {
    generateStubs = true
}

私のプロジェクト:buildToolsVersion = "23.0.3"

トップレベルbuild.gradle

dependencies {
        classpath 'com.Android.tools.build:gradle:2.0.0'
    }
5
Garf1eld

Kotlinの構成データバインディング

build.gradle(フォルダーアプリ)

apply plugin: 'kotlin-kapt'

Android {
   ...
   dataBinding {
      enabled = true
   }
}

dependencies {
   // data binding
   kapt "com.Android.databinding:compiler:3.1.3"
}

コトリンをお楽しみください...

android Studio ver 3.1.3でのこの作業

apply plugin: 'kotlin-kapt'

dataBinding {
    enabled = true
}

show usage sample

3
emad pirayesh

あなたに以下を追加してくださいapp build.gradle

kapt "com.Android.databinding:compiler:$Android_plugin_version"
apply plugin: 'kotlin-kapt' // This one at top where plugin belong to

これでうまくいきます。

$Android_plugin_versioncom.Android.tools.build:gradleapplication build.gradleのバージョンです

また、これをモジュールに追加しますbuild.gradle

Android { /// Existing Code kapt { generateStubs = true } }

2
RKS

重要な更新

Androidのドキュメント で見ることができます

バージョン3.2の新しいコンパイラはデフォルトで有効になっています。

だからちょうど更新あなたのAndroid StudioをV3.2または 新しい 。不要な設定をすべて削除します。

したがって、アプリレベルbuild.gradleでdataBindingを有効にします。

Android {
    dataBinding {
        enabled = true
    }
}

自動的にすべてを行います。

以下の行から安全に削除できます。

  • 削除databinding.compiler

    kapt 'com.Android.databinding:compiler:3.0.1'
    
  • kaptを削除

    kapt {
        generateStubs = true
    }
    

私の完全な設定

build.gradle(プロジェクト)

kotlin_version = '1.2.71'    
classpath 'com.Android.tools.build:gradle:3.2.0'

gradle最新バージョン を使用します。 kotlin最新バージョン を使用します。

build.gradle(アプリ)

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

compileSdkVersion 28
targetSdkVersion 28

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

重要単に設定をコピーして貼り付けないでください。 Kotlinバージョンのセットアップについては、 この回答 を参照してください。

gradle-wrapper.properties

distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.Zip
2
Khemraj

私の場合、追加

kapt {
    generateStubs = true
}

私のために問題を解決しました。初めて無視しましたが、問題とは無関係だと思いました。

未解決の参照データバインディング

しかし、現在、データバインディングは正常に機能しています。

0
Mahmoud

Kotlin言語を使用している場合にAndroid Projectにデータバインディングを追加します。

ステップ以下

-まず、以下のプラグインを追加する必要があります

**apply plugin: 'kotlin-kapt'**

--2番目のdataBindingが有効true

**dataBinding {
        enabled = true
    }**

「SYNC NOW」を押した後にapp.build.gradleに追加されたこのすべてのポイント

たとえば、プロファイルアクティビティを編集してから、kotlinでバインド変数を定義する方法を教えてください。

lateinit var buildProfileBinding: ActivityBuildProfileBinding

buildProfileBinding = getBinding()

ここで、get bindingはどのタイプのバインディングオブジェクトを処理するメソッドです

protected <T extends ViewDataBinding> T getBinding() {
                return (T) binding;
            }
0
Shripal Shah

私の場合、エラーはUnresolved reference: RegisterationUserBindingでした。レイアウト名fragment_registeration_userをこのFragmentRegisterationUserBindingのように使用し、Databindingレイアウトで作成するとエラーはなくなりました。

0

自分の経験を共有したい。 Android studioでKotlinでデータバインディングを使用するには、追加するには十分です

dataBinding {
    enabled = true
}

その後、「同期」し、「プロジェクトを作成」することが非常に重要です。その後、すべてのオブジェクトが使用可能になります。

0
gloomyad