You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Retrofit获取图片URL并在RecyclerView项中展示?

解决RecyclerView中展示网络图片的问题

核心问题分析

当前你的Adapter仅接收List<String>作为数据源,无法获取ItemsItem中的avatarUrl字段,同时缺少图片加载逻辑。以下是分步解决方案:


1. 调整RecyclerView Adapter的数据源与ViewHolder

将Adapter的数据源改为List<ItemsItem>,并在ViewHolder中添加ImageView的引用,这样才能获取用户的头像链接和用户名:

class UsersAdapter(private val listUsers: List<ItemsItem>): RecyclerView.Adapter<UsersAdapter.ViewHolder>() {

    override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int) =
        ViewHolder(LayoutInflater.from(viewGroup.context).inflate(R.layout.item_users, viewGroup, false))

    override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) {
        val user = listUsers[position]
        viewHolder.tvUser.text = user.login
        // 后续添加图片加载逻辑
    }

    override fun getItemCount() = listUsers.size

    class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
        val tvUser: TextView = view.findViewById(R.id.tv_users)
        val ivUser: ImageView = view.findViewById(R.id.iv_users) // 新增ImageView引用
    }
}

2. 集成图片加载库(以Glide为例)

Android原生不支持直接加载网络图片,需借助第三方库,Glide是最常用的选择之一:

  • 首先在Module级别的build.gradle中添加依赖:
dependencies {
    // 其他依赖...
    implementation 'com.github.bumptech.glide:glide:4.16.0'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.16.0'
}
  • 然后在Adapter的onBindViewHolder中添加图片加载代码:
override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) {
    val user = listUsers[position]
    viewHolder.tvUser.text = user.login
    
    Glide.with(viewHolder.itemView.context)
        .load(user.avatarUrl)
        .circleCrop() // 可选:将头像裁剪为圆形
        .placeholder(R.drawable.ic_default_avatar) // 可选:加载中的占位图
        .error(R.drawable.ic_error_avatar) // 可选:加载失败的占位图
        .into(viewHolder.ivUser)
}

3. 配合LiveData更新数据(如果使用LiveData)

若你通过ViewModel用LiveData管理用户列表,在Activity/Fragment中观察数据变化并更新Adapter:

// 在Activity/Fragment内
viewModel.userList.observe(this) { users ->
    users?.let {
        // 初始化Adapter并设置给RecyclerView
        val adapter = UsersAdapter(it)
        recyclerView.adapter = adapter
        
        // 若需支持数据更新,可给Adapter添加更新方法:
        // fun updateData(newList: List<ItemsItem>) {
        //     (listUsers as MutableList).clear()
        //     listUsers.addAll(newList)
        //     notifyDataSetChanged()
        // }
        // 调用方式:(recyclerView.adapter as UsersAdapter).updateData(it)
    }
}

必要配置

确保在AndroidManifest.xml中添加网络权限:

<uses-permission android:name="android.permission.INTERNET" />

内容的提问来源于stack exchange,提问作者Bryant Anthony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 18:07:09