4

私はアプリケーションモジュールを持っています、 "Test"としましょう。 「テスト」モジュールはサブモジュールBに依存する。両方ともデータ結合を可能にする。ライブラリモジュールBでは、データバインディングを使用して簡単なアクティビティを作成します。その目的は再利用性のためです。たとえば、基本のログイン画面を作成し、後で多くのアプリケーションで使用できます。私がしようとすると、しかしサブモジュール内のAndroidデータバインド

class MainActivity1 : MainActivity(){ 

    override fun onCreate(savedInstanceState: Bundle?) { 
     super.onCreate(savedInstanceState) 
    } 

    fun doSomething(){ 
     binding.rootLayout.setBackgroundResource(R.color.colorPrimary) 
    } 
} 

:以下のサンプルコードでは、パッケージB.

package com.test.packageb 

     open class MainActivity : AppCompatActivity() { 

     lateinit var binding : ActivityMainBinding 

     override fun onCreate(savedInstanceState: Bundle?) { 
      super.onCreate(savedInstanceState) 
      binding = DataBindingUtil.setContentView(this, R.layout.activity_main) 
     } 
    } 

、その後、「テスト」モジュールでは、私は単にこのように、物事をカスタマイズ行うためにMainActivityクラスを継承することができています"テスト"アプリケーションを実行するには、私はこのエラーが発生しました

Error:(17, 9) Cannot access class 'com.test.packageb.databinding.ActivityMainBinding'. Check your module classpath for missing or conflicting dependencies
Error:(17, 17) Unresolved reference: rootLayout

私は何を欠席しましたか?実装する必要があるものは他にありますか?

テストアプリのbuild.gradle

apply plugin: 'com.android.application' 

apply plugin: 'kotlin-android' 
apply plugin: 'kotlin-kapt' 
apply plugin: 'kotlin-android-extensions' 

android { 
    compileSdkVersion 26 
    buildToolsVersion "26.0.1" 
    defaultConfig { 
     applicationId "com.test.testapplication" 
     minSdkVersion 15 
     targetSdkVersion 26 
     versionCode 1 
     versionName "1.0" 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
    } 

    dataBinding{ 
     enabled true 
    } 

    buildTypes { 
     debug { 

     } 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    kapt 'com.android.databinding:compiler:3.0.0-beta4' 
    implementation fileTree(include: ['*.jar'], dir: 'libs') 
    implementation 'com.android.support:appcompat-v7:26.0.2' 
    implementation 'com.android.support.constraint:constraint-layout:1.0.2' 
    testImplementation 'junit:junit:4.12' 
    androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.1', { 
     exclude group: 'com.android.support', module: 'support-annotations' 
    }) 
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" 
    implementation project(':packageb') 
} 

パッケージBのbuild.gradle問題はあなたに関連しているが、私はいくつかの種類を見つけることができた場合

apply plugin: 'com.android.library' 
apply plugin: 'kotlin-android' 
apply plugin: 'kotlin-android-extensions' 
apply plugin: 'kotlin-kapt' 
android { 
    compileSdkVersion 26 
    buildToolsVersion "26.0.1" 


    defaultConfig { 
     minSdkVersion 15 
     targetSdkVersion 26 
     versionCode 1 
     versionName "1.0" 

     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 

    } 
    dataBinding{ 
     enabled true 
    } 
    buildTypes { 
     debug { 
      minifyEnabled false 
     } 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 

} 

dependencies { 
    kapt 'com.android.databinding:compiler:3.0.0-beta4' 
    implementation fileTree(dir: 'libs', include: ['*.jar']) 
    implementation 'com.android.support:appcompat-v7:26.0.2' 
    implementation 'com.android.support.constraint:constraint-layout:1.0.2' 
    testImplementation 'junit:junit:4.12' 
    androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.1', { 
     exclude group: 'com.android.support', module: 'support-annotations' 
    }) 
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" 
} 
+0

あなたに役立つようにグラデーションコードを入力してください。 –

+0

@KuLdipPaTel:両方のモジュールのgradleファイルを追加しました。ありがとう。 – jeytoe

+0

https://blog.mindorks.com/implementation-vs-api-in-gradle-3-0-494c817a6fa check link –

答えて

0

わかりません溶液。それは、基本クラスは、一般的な

class A<BINDING extends ViewDataBinding> { 
    protected ABinding binding; 

    void init(){ 
     binding = (ABinding) DataBindingUtil.setContentView(this, R.layout.a); 
    } 
} 

を持っており、

class B<ABinding> { 
    // you can use instance in this class 
} 

サブモジュールからあなたが劇的に変化しないことをここでの主な問題は、子クラスに同じ結合を渡す必要があります動作させるために

既存の要素を隠すか、実行時に新しい要素を追加するだけです。しかし、私はそのような場合、まったく新しいクラスを作るほうが簡単だと思います。

関連する問題