滑行不会将图像放入imageView

时间:2020-01-24 06:41:02

标签: android kotlin android-recyclerview android-adapter

我有下一个这样的适配器:

class ChatAdapter(chatItems: List<User>,
                  context: MainActivity) : RecyclerView.Adapter<ChatAdapter.ChatItemHolder>() {

    private val items= chatItems
    private val context = context

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ChatItemHolder {
        val itemView = LayoutInflater.from(parent.context).inflate(R.layout.chat_item, parent, false)
        return ChatItemHolder(itemView)
    }

    override fun getItemCount(): Int = items.size

    override fun onBindViewHolder(holder: ChatItemHolder, position: Int) {
        holder.firstName?.text = items[position].firstName
        holder.lastName?.text = items[position].lastName
        holder.initials?.text = setInitials(items[position].firstName, items[position].lastName )
        Log.d("__test__", items[position].avatarUri.toString())

     // Probleme is here
    Glide.with(context)
                .load(items[position].avatarUri.toString())
                .centerCrop()
                .into(holder.avatar)
        holder.isOnline?.visibility = if (items[position].online) View.VISIBLE else View.GONE
    }

    inner class ChatItemHolder(chatItem: View) : RecyclerView.ViewHolder(chatItem){
        var firstName: TextView? = null
        var lastName: TextView? = null
        var initials: TextView? = null
        var avatar: ImageView
        var isOnline: View? = null
        init {
            firstName = chatItem.findViewById(R.id.tv_first_name)
            lastName =chatItem.findViewById(R.id.tv_last_name)
            initials = chatItem.findViewById(R.id.tv_initials)
            avatar = chatItem.findViewById(R.id.iv_avatar)
            isOnline = chatItem.findViewById(R.id.online)
        }
    }

    private fun setInitials(fn: String?, ln: String?): String {
        return if (ln.isNullOrEmpty())
            fn!!.first().toString() else fn!!.first().toString() + ln.first()
    }
}

但是当我运行我的代码时,所有工作正常排除Glide,但没有出现图像。 为什么? 我的recyclerView的其他详细信息可以正常工作,firstNamelastNameisOnline字段均显示为单视图所需的详细信息。

3 个答案:

答案 0 :(得分:1)

考虑到您的items[position].avatarUri属于Uri类型,请不要调用toString方法,也许就是问题所在

答案 1 :(得分:0)

Sandesh给出的答案是绝对正确的,如果在使用glide将图像设置为imageview时遇到任何错误,只需添加以下行即可:

.error(R.drawable.your_image)

如果发生任何错误,它将使用您提供的图像在imageview中进行设置。 谢谢您,如果有任何问题,请帮助我改善答案。

答案 2 :(得分:0)

请在您的滑行代码中添加一个侦听器,这样您将得到图像未加载的原因(GlideException)。

services.AddControllers()
        .AddJsonOptions(options =>
        {
            options.JsonSerializerOptions.PropertyNamingPolicy= null;
        );