4

애플리케이션 모듈이 있는데 "테스트"라고합시다. "Test"모듈은 하위 모듈 B에 의존합니다. 둘 다 데이터 바인딩을 사용합니다. 라이브러리 모듈 B에서 데이터 바인딩을 사용하여 간단한 활동을 작성합니다. 그 목적은 재사용을위한 것입니다. 예를 들어, 기본 로그인 화면을 작성하고 나중에 많은 응용 프로그램에서 사용할 수 있습니다. 다음은 패키지의 샘플 코드는 그냥 간단하게 다음과 같이 일을 사용자 정의 할 MainActivity 클래스를 상속 할 수 있습니다, "테스트"모듈에서 다음 하위 모듈의 Android 데이터 바인딩

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) 
     } 
    } 

와 B

입니다 :

class MainActivity1 : MainActivity(){ 

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

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

그러나, 나는하려고 할 때 "테스트"응용 프로그램을 실행하는 데,이 오류가 나는 놓치지 않았다 무엇

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 링크 확인 –

답변

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 
} 

주요 문제에서 하위 클래스에 같은 바인딩을 통과 당신은 크게 변경할 수 없습니다 UI, 기존 요소를 숨기거나 런타임에 새 요소 추가. 그러나이 경우에 완전히 새로운 수업을 만드는 것이 더 쉽다고 생각합니다.

관련 문제