簡體   English   中英

數據綁定+ Kotlin室。 如何在Kotlin中綁定數據類?

[英]Databinding + Room in Kotlin. How to bind data class in Kotlin?

我已經制作了一個僅在kotlin中成功運行的Room數據庫的演示。 但是現在我也將該演示轉換為數據綁定。

問題是在kotlin中,我們將數據類作為會議室數據庫的實體。 在Java中,我們只制作一個pojo類。 因此,在Java中這很容易,但是在Kotlin中則有所不同。

我的問題和我的問題是如何綁定Kotlin中的數據類?

以下是我的數據類

@Entity
data class Bill(

    @ColumnInfo(name = "billNo")
    var billNo: Int,
    @ColumnInfo(name = "customerName")
    var customerName: String,
    @ColumnInfo(name = "customerNo")
    var customerNo: String,
    @ColumnInfo(name = "itemList")
    @TypeConverters(ItemListConverter::class)
    var itemList: ArrayList<Item>
   ) {
       @PrimaryKey(autoGenerate = true)
      var billId: Int = 0
     }

轉接器類別

class BillAdapter(private val ctx: Context, private var payeeList: ArrayList<Bill>) : RecyclerView.Adapter<BillAdapter.ViewHolder>() {

var listdata = payeeList
var layoutInflater:LayoutInflater? = null
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BillAdapter.ViewHolder {

    if(layoutInflater==null){
        layoutInflater = LayoutInflater.from(parent.getContext());
    }

var binding:BillListItemBinding =  DataBindingUtil.inflate(this!!.layoutInflater!!, R.layout.bill_list_item, parent, false)
    return ViewHolder(binding)
}

//this method is binding the data on the list
   override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.binding.bill =  listdata[position]

    }

//this method is giving the size of the list
override fun getItemCount(): Int {
    return listdata.size
}

   inner class ViewHolder(var binding: BillListItemBinding) : 
RecyclerView.ViewHolder(binding.root) {}
}

運行時錯誤。

e:[kapt]發生異常:android.databinding.tool.util.LoggedErrorException:發現數據綁定錯誤。

應用程序級別build.gradle

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

apply plugin: 'kotlin-kapt'  // add this line

android {


    dataBinding {
        enabled = true
    }

    compileSdkVersion 27
    defaultConfig {
        applicationId "com.example.root.roomdatabinding"
        minSdkVersion 15
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation"org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support:recyclerview-v7:27.1.1'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
    implementation 'io.reactivex.rxjava2:rxjava:2.1.17'
    implementation "android.arch.persistence.room:runtime:1.1.1"
    kapt "android.arch.persistence.room:compiler:1.1.1"
    implementation 'com.google.code.gson:gson:2.2.4'
    implementation 'android.arch.lifecycle:extensions:1.1.0'
    kapt 'com.android.databinding:compiler:3.1.1'

}

請遵循以下代碼,它對您有用:

class WeatherAdapter(val mContext: Context, private val guestLists:   List<WeatherData>) : RecyclerView.Adapter<WeatherAdapter.ViewHolder>() {
private var weatherList: WeatherData? = null



override fun onCreateViewHolder(viewGroup: ViewGroup, i: Int): ViewHolder {
    return ViewHolder(LayoutInflater.from(mContext).inflate(R.layout.weather_row, viewGroup, false))
}

override fun onBindViewHolder(viewHolder: ViewHolder, i: Int) {
    weatherList = guestLists[i]



    viewHolder.bind(weatherList)

}

override fun getItemCount(): Int {
    return guestLists.size
}

inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

    private val mBinding: WeatherRowBinding?

    init {
        mBinding = DataBindingUtil.bind(itemView)
    }

    fun bind(weatherList: WeatherData?) {
        mBinding!!.setSetdata(weatherList)
    }
}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM