4

aar library module複数のアプリの基盤として使用されているジェネリック クラスを含む Android プロジェクトがあります。すべてが Kotlin で記述されており、Java コードは使用されていません (サードパーティ ライブラリを除く)。

この問題は、アプリを実行するためにアセンブルしようとすると発生します。アプリケーションを実行しようとすると、次のエラーが表示されます。

:app:compileDebugKotlinAfterJava
e: Supertypes of the following classes cannot be resolved. Please make sure you have the required dependencies in the classpath:
    class com.test.app.view.ECMKotlinTextView, unresolved supertypes: com.test.lib.localization.Localizable

この質問の目的のために、android.widget.TextViewクラスを拡張してインターフェースを実装するカスタム TextView の 2 つの別々のバージョンを作成しましたLocalizable。1 つはJavaに、もう 1 つは にありKotlinます。

ECMJavaTextView.java

package com.test.lib.view;

import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build;
import android.util.AttributeSet;
import android.widget.TextView;

import com.test.lib.localization.Localizable;

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.Map;


public class ECMJavaTextView extends TextView implements Localizable{
    public ECMJavaTextView(Context context) {
        super(context);
    }

    public ECMJavaTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public ECMJavaTextView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public ECMJavaTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    @Nullable
    @Override
    public String getTextId() {
        return "JAVA TEXT ID";
    }

    @Override
    public void setTextId(@Nullable String s) {

    }

    @Nullable
    @Override
    public Map<String, String> getTextArgs() {
        return null;
    }

    @Override
    public void setTextArgs(@Nullable Map<String, String> map) {

    }

    @Override
    public void updateText(@NotNull String text) {

    }
}

ECMKotlinTextView.kt

package com.test.lib.view

import android.annotation.TargetApi
import android.content.Context
import android.graphics.Canvas
import android.os.Build
import android.util.AttributeSet
import android.util.Log
import android.widget.TextView
import com.test.lib.localization.Localizable
import com.test.lib.localization.updateText

class ECMKotlinTextView : TextView , Localizable {

       override var textId: String? = "textID"
        get() = field
        set(value) {
            field = value
        }
    override var textArgs: Map<String, String>? = null
        get() = field
        set(value) {
            field = value
        }

    override fun updateText(text: String) {

    }
    constructor(context: Context?) : super(context){

    }
    constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {

    }
    constructor(context: Context?, attrs: AttributeSet?, defStyle: Int) : super(context, attrs, defStyle) {

    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    constructor(context: Context?, attrs: AttributeSet?, defStyle: Int, defStyleRes: Int) : super(context, attrs, defStyle, defStyleRes) {

    }

    override fun onDraw(canvas: Canvas?) {
        super.onDraw(canvas)
    }

}

どちらもライブラリ モジュールに xml レイアウトがあり、それらをmain_activity.xmlファイルに含めます。findViewbyId()問題をメソッドに切り分けることができました(ここでは、kotlin-extensionsライブラリを使用してビューを取得します。両方で試しました)。

MainActivity.kt

import kotlinx.android.synthetic.main.content_main.*

class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedListener {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)


        var java_textV = demo_java_text_view as ECMJavaTextView
        Log.d("JAVA", "${java_textV.textId}")

        var kotlin_textV = demo_kotlin_text_view as ECMKotlinTextView
        Log.d("Kotlin", "${kotlin_textV.textId}")
    }
...

2 番目のキャストでは常に上記のエラーが発生しますが、キャスト () を削除すると、必要なメソッドにECMKotlinTextViewアクセスできなくなります。Localizableさらに興味深い点は、JAVAクラスが期待どおりに機能することです。

それが私が見逃しているものなのか、セットアップしていないものなのか、それとも現在 Kotlin プラグインのバグなのかはわかりません。誰かがこれで私を助けることができますか? いくつかの洞察をいただければ幸いです。

4

0 に答える 0