Kotlin Android开发:声明GroupieViewHolder时出错求助
GroupieViewHolder 无法正常工作的排查方案
我是Kotlin Android开发新手,正在跟着教程开发即时通讯应用,但GroupieViewHolder一直无法正常工作,已经花了4小时排查仍未解决。以下是我的项目配置、代码及错误截图:
项目级gradle文件
buildscript { ext.kotlin_version = '1.6.21' repositories { mavenCentral() } dependencies { classpath 'com.google.gms:google-services:4.3.14' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } plugins { id 'com.android.application' version '7.2.1' apply false id 'com.android.library' version '7.2.1' apply false id 'org.jetbrains.kotlin.android' version '1.7.10' apply false } task clean(type: Delete) { delete rootProject.buildDir }
应用级gradle文件
plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android' id 'com.google.gms.google-services' id 'kotlin-android-extensions' } apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' android { compileSdk 32 androidExtensions { experimental = true } defaultConfig { applicationId "com.example.assignment" minSdk 21 targetSdk 32 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } buildFeatures { viewBinding true } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = '1.8' } } dependencies { implementation 'androidx.core:core-ktx:1.7.0' implementation 'androidx.appcompat:appcompat:1.5.1' implementation 'com.google.android.material:material:1.6.1' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation 'com.google.firebase:firebase-auth-ktx:21.1.0' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' implementation platform('com.google.firebase:firebase-bom:31.0.1') implementation 'com.google.firebase:firebase-analytics-ktx' implementation 'com.google.firebase:firebase-storage-ktx' implementation 'com.google.firebase:firebase-database-ktx' implementation 'de.hdodenhof:circleimageview:3.1.0' // 进度对话框库 implementation 'com.jpardogo.googleprogressbar:library:1.2.0' // 无法将groupie添加到gradle //implementation "com.github.lisawray.groupie:groupie:$groupie_version" implementation "com.github.lisawray.groupie:groupie:2.10.0" implementation 'com.github.lisawray.groupie:groupie-kotlin-android-extensions:2.10.0' implementation 'com.squareup.picasso:picasso:2.71828' }
settings.gradle文件
pluginManagement { repositories { gradlePluginPortal() google() mavenCentral() } } dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() mavenCentral() maven { url 'https://jitpack.io' } jcenter() } } rootProject.name = "Assignment" include ':app'
NewMessageActivity.kt代码
package com.example.assignment import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log import com.google.firebase.database.DataSnapshot import com.google.firebase.database.DatabaseError import com.google.firebase.database.FirebaseDatabase import com.google.firebase.database.ValueEventListener import com.squareup.picasso.Picasso import com.xwray.groupie.GroupieAdapter import kotlinx.android.synthetic.main.activity_new_message.* import com.xwray.groupie.kotlinandroidextensions.Item import com.xwray.groupie.kotlinandroidextensions.GroupieViewHolder import kotlinx.android.synthetic.main.song.* // 无法导入该布局 import kotlinx.android.synthetic.main.my_item_layout.* // 无法导入该布局 import kotlinx.android.synthetic.main.user_row_new_message.view.* class NewMessageActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_new_message) supportActionBar?.title="选择用户" fetchUsers() } private fun fetchUsers() { val ref = FirebaseDatabase.getInstance().getReference("/Users") ref.addListenerForSingleValueEvent(object: ValueEventListener { override fun onDataChange(p0: DataSnapshot) { val adapter = GroupieAdapter<GroupieViewHolder>() // 此处报错 p0.children.forEach { Log.d("NewMessage", it.toString()) val user = it.getValue(User::class.java) if(user != null) { adapter.add(UserItem(user)) } } recyclerview_newmessage.adapter=adapter } override fun onCancelled(p0: DatabaseError) { TODO("尚未实现") } }) // 原代码缺失闭合括号,已补充 } } class UserItem(val user: User): Item<GroupieViewHolder>() { // 此处报错 override fun bind(viewHolder: GroupieViewHolder, position: Int) { viewHolder.itemView.username_textview_new_message.text = user.username Picasso.get().load(user.profileImageUrl).into(viewHolder.itemView.imageview_new_message) } override fun getLayout(): Int { return R.layout.user_row_new_message } }
错误截图

解决方案
1. 修复Gradle版本冲突
项目级gradle中kotlin版本为1.6.21,但应用级插件使用1.7.10,版本不一致会导致编译异常。统一版本:
- 修改项目级gradle的
ext.kotlin_version = '1.7.10',保证kotlin-gradle-plugin与kotlin-android插件版本匹配
2. 移除过时的Kotlin Android Extensions
kotlin-android-extensions已被官方弃用,且Groupie的groupie-kotlin-android-extensions模块停止维护,改用View Binding替代:
- 从应用级gradle的plugins中移除
id 'kotlin-android-extensions',删除apply plugin: 'kotlin-android-extensions'和androidExtensions配置块 - 移除
groupie-kotlin-android-extensions依赖,仅保留核心Groupie依赖:implementation "com.github.lisawray.groupie:groupie:2.10.0"
3. 修正代码语法与导入问题
- 删除无法导入的无用布局导入:
kotlinx.android.synthetic.main.song.*和kotlinx.android.synthetic.main.my_item_layout.* - GroupieAdapter无需指定泛型,直接初始化:
val adapter = GroupieAdapter() - 修改
UserItem继承逻辑,使用标准Groupie ViewHolder:import com.xwray.groupie.Item import com.xwray.groupie.ViewHolder class UserItem(val user: User): Item<ViewHolder>() { override fun bind(viewHolder: ViewHolder, position: Int) { viewHolder.itemView.username_textview_new_message.text = user.username Picasso.get().load(user.profileImageUrl).into(viewHolder.itemView.imageview_new_message) } override fun getLayout(): Int { return R.layout.user_row_new_message } }
4. 同步并重建项目
- 点击Android Studio的
File -> Sync Project with Gradle Files同步配置 - 执行
Build -> Clean Project和Build -> Rebuild Project清理重建项目
内容的提问来源于stack exchange,提问作者mkk
相关产品推荐
相关产品推荐

