【问题标题】:ViewHolder with onClicklistener Issue with UninitializedPropertyAccessException带有 onClicklistener 的 ViewHolder 带有 UninitializedPropertyAccessException 的问题
【发布时间】:2021-09-05 23:03:05
【问题描述】:

我是初学者,所以请与我裸露。

我有一个带有 onclicklistener 的查看器。

点击的目的是使用 Jetpack Navigation 将 Url 字符串发送到另一个片段(希望我做对了)

Url 正在数据类本身内创建。

但我不断收到此错误:

kotlin.UninitializedPropertyAccessException: lateinit property galleryItem has not been initialized

我尝试使用伴生对象和其他方式解决问题,但没有任何效果...有解决方案吗?

这里是视图持有者和数据类

import android.annotation.SuppressLint
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageButton
import androidx.core.os.bundleOf
import androidx.navigation.Navigation
import androidx.paging.PagingDataAdapter
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.saheralsous.android.R
import com.saheralsous.android.database.remote.model.PagingData

class RecyclerViewPhotoAdapter() :
    PagingDataAdapter<PagingData.GalleryItem, PhotoHolder>(
        diffCallback = DiffCallback
    ) {
    override fun onBindViewHolder(holder: PhotoHolder, position: Int) {
        getItem(position)?.let {
            holder.bind(it)
        }
    }

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

class PhotoHolder(view: View):
    RecyclerView.ViewHolder(view), View.OnClickListener {
    
    private val imageButtom: ImageButton = view.findViewById(R.id.ImageButton)
    private lateinit var galleryItem: PagingData.GalleryItem //page. 594


    @SuppressLint("ResourceType")
    fun bind(galleryItem : PagingData.GalleryItem){
        /*
        idTextView.text = galleryItem.id
        ownerTextView.text = galleryItem.owner
        titleTextView.text = galleryItem.title
        urlTextView.text = galleryItem.url
         */
        galleryItem.url.let { url ->
            Glide.with(itemView)
                .load(url)
                .override(350,350)
                .into(imageButtom)
        }
    }

    init {
        imageButtom.setOnClickListener(this)
    }

    override fun onClick(v: View?) {
        println("item was clicked")
        val bundle = bundleOf("url" to galleryItem.photoPageUri )  <-- here is the issue
        Navigation.findNavController(v!!).navigate(
            R.id.action_photoGalleryFragment_to_photoPageFragment,
            bundle)
    }
}




object DiffCallback : DiffUtil.ItemCallback<PagingData.GalleryItem>() {

    override fun areItemsTheSame(oldItem: PagingData.GalleryItem, newItem: PagingData.GalleryItem): Boolean {
        // Id is unique.
        return oldItem.id == newItem.id
    }

    override fun areContentsTheSame(oldItem: PagingData.GalleryItem, newItem: PagingData.GalleryItem): Boolean {
        return oldItem == newItem
    }
}

数据类


import android.net.Uri
import androidx.annotation.Keep
import com.google.gson.annotations.SerializedName

data class PagingData(
    val total : Int =0,
    val Page: Int = 0,
    val photos : List<GalleryItem>
){
    val endOfPage = total == Page

    @Keep
    data class GalleryItem(
        @SerializedName("id")
        val id: String,
        @SerializedName("owner")
        val owner: String,
        @SerializedName("title")
        var title: String,
        @SerializedName("url_s")
        val url: String) {
        val photoPageUri : Uri <-- here is the value
            get() {
                return Uri.parse("https://www.flickr.com/photos/")
                    .buildUpon()
                    .appendPath(owner)
                    .appendPath(id)
                    .build()
            }
    }
}

【问题讨论】:

    标签: android kotlin onclick android-viewholder android-jetpack-navigation


    【解决方案1】:

    如错误所述,您尚未在 PhotoHolder 中初始化 galleryItem 实例变量。将此添加到您的 bind 方法中:

    this.galleryItem = galleryItem
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-07
      • 1970-01-01
      • 2012-02-17
      • 1970-01-01
      • 2021-10-24
      • 1970-01-01
      • 2021-01-17
      相关资源
      最近更新 更多