无法在适配器中使用kotlin扩展

时间:2020-05-13 19:06:32

标签: android kotlin-extension

Android Studio 3.6

build.gradle:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: "kotlin-kapt"



android {
    dataBinding {
        enabled = true
    }
    compileSdkVersion 29
    buildToolsVersion "29.0.3"

    defaultConfig {
        applicationId "com.myproject"
        minSdkVersion 23
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"

现在在活动中,我可以使用此功能:

import kotlinx.android.synthetic.main.event_details_activity.*

class EventDetailsActivity : AppCompatActivity() {
    private lateinit var dataBinding: EventDetailsActivityBinding

    companion object {
        val EVENT = EventDetailsActivity.javaClass.canonicalName + "_EVENT"
        private val TAG = EventDetailsActivity::class.java.name
    }

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

        dataBinding =
            DataBindingUtil.setContentView(this, R.layout.event_details_activity)

         // THIS WORK FINE
        eventTitleTextView.text = "Test"

好。 现在我想在Adapter中使用Kotlin扩展。

我尝试这个:

import kotlinx.android.synthetic.main.event_list_item.*

class EventAdapter(
    context: Context?,
    data: List<*>?
) : DataBindingRecyclerViewAdapter(context, data) {
    private var listener: AdapterListener? = null

    override fun onBindViewHolder(
        holder: RecyclerView.ViewHolder,
        position: Int
    ) {
        super.onBindViewHolder(holder, position)
        descriptionTextView.text = "TEST"
    }

在这里event_list_item.xml

   <TextView
            android:id="@+id/descriptionTextView"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="@{model.description}"
            android:textColor="@android:color/darker_gray"
            android:textSize="14sp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="@+id/titleTextView"
            app:layout_constraintStart_toStartOf="@+id/titleTextView"
            app:layout_constraintTop_toBottomOf="@+id/titleTextView" />

java文件:

public abstract class DataBindingRecyclerViewAdapter extends RecyclerView.Adapter {

但是我得到了错误:

Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: 
public val Activity.descriptionTextView: TextView! defined in kotlinx.android.synthetic.main.event_list_item
public val Dialog.descriptionTextView: TextView! defined in kotlinx.android.synthetic.main.event_list_item
public val android.app.Fragment.descriptionTextView: TextView! defined in kotlinx.android.synthetic.main.event_list_item
public val androidx.fragment.app.Fragment.descriptionTextView: TextView! defined in kotlinx.android.synthetic.main.event_list_item

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我通过将其添加到 gradle 构建文件中来解决了

androidExtensions {
    experimental = true
}