【发布时间】: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