Error: requestHandler has not been initialized
Error: requestHandler has not been initialized
这个项目是一个回收器视图片段,它从 flickr 获取图像并显示它。
我使用循环器和处理程序在回收器片段和下载缩略图片段之间进行通信...我正在使用 Android Studio Bumblebee...
我在使用 requestHandler 时遇到错误……也许我没有看到具体问题。但是我检查了几次代码都没有找到缺失的部分…
我收到这个错误:
kotlin.UninitializedPropertyAccessException: lateinit property requestHandler has not been initialized at com.bignerdranch.android.photogallery.ThumbnailDownloader.queueThumbnail(ThumbnailDownloader.kt:94)
指的是这个……
fun queueThumbnail(target: T, url: String){ //page 510
Log.i(TAG, "Got a URL: $url")
requestMap[target] = url //page 521
requestHandler.obtainMessage(MESSAGE_DOWNLOAD, target)
.sendToTarget()
}
Recyclerview 正在从另一个片段调用此代码
override fun onBindViewHolder(holder: PhotoHolder, position: Int) {
val galleryItem = galleryItems[position]
//holder.bindTitle(galleryItem.title)
val placeholder: Drawable = ContextCompat.getDrawable(
requireContext(),
R.drawable.hala_atamleh
)?: ColorDrawable()
holder.bindTitle(placeholder) //should be bindDrawable but it didn't work
--> thumbnailDownloader.queueThumbnail(holder, galleryItem.url) //page 515
}
据我所知,我在这里初始化了它:
@Suppress("UNCHECKED_CAST") //page 522
@SuppressLint("HandlerLeak")
override fun onLooperPrepared() {
requestHandler = object : Handler(Looper.getMainLooper()){
override fun handleMessage(msg: Message) {
if (msg.what == MESSAGE_DOWNLOAD){
val target = msg.obj as T
Log.i(TAG, "Got a request for URL: ${requestMap[target]}")
handleRequest(target)
}
}
}
}
我错过了什么导致这个错误?
这里是文件代码:
import android.annotation.SuppressLint
import android.graphics.Bitmap
import android.os.Handler
import android.os.HandlerThread
import android.os.Looper
import android.os.Message
import android.util.Log
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.OnLifecycleEvent
import java.util.concurrent.ConcurrentHashMap
private const val TAG = "ThumbnailDownloader"
private const val MESSAGE_DOWNLOAD = 0
class ThumbnailDownloader<in T>(private val responseHandler: Handler, //page. 524
private val onThumbnailDownloaded : (T, Bitmap) -> Unit)
: HandlerThread(TAG) /*, LifecycleObserver page 512*/ { //page. 510
private lateinit var requestHandler: Handler //page516++
private var hasQuit = false
private val requestMap = ConcurrentHashMap<T, String>()
private val flickrFetchr = FlickrFetchr()
val fragmentLifecycleObserver: LifecycleObserver = //page 527
object : LifecycleObserver{
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
fun setup() {
Log.i(TAG, "Starting background thread")
start() //page 514
looper
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
fun tearDown() {
Log.i(TAG, "Destroying background thread")
quit()
}
}
@Suppress("UNCHECKED_CAST") //page 522
@SuppressLint("HandlerLeak")
override fun onLooperPrepared() {
requestHandler = object : Handler(Looper.getMainLooper()){
override fun handleMessage(msg: Message) {
if (msg.what == MESSAGE_DOWNLOAD){
val target = msg.obj as T
Log.i(TAG, "Got a request for URL: ${requestMap[target]}")
handleRequest(target)
}
}
}
}
//page 528
val viewLifecycleObserver : LifecycleObserver =
object : LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
fun tearDown(){
Log.i(TAG, "Clearing all requests from Queue")
requestHandler.removeMessages(MESSAGE_DOWNLOAD)
requestMap.clear()
}
}
override fun quit(): Boolean {
hasQuit = true
return super.quit()
}
fun queueThumbnail(target: T, url: String){ //page 510
Log.i(TAG, "Got a URL: $url")
requestMap[target] = url //page 521
requestHandler.obtainMessage(MESSAGE_DOWNLOAD, target)
.sendToTarget()
}
fun clearQueue() {
requestHandler.removeMessages(MESSAGE_DOWNLOAD)
requestMap.clear()
}
private fun handleRequest(target: T){
val url = requestMap[target] ?: return
val bitmap = flickrFetchr.fetchPhoto(url) ?: return
responseHandler.post(Runnable { //page.526
if(requestMap[target] != url || hasQuit){
return@Runnable
}
requestMap.remove(target)
onThumbnailDownloaded(target, bitmap)
})
}
}
PHOTOGalleryFragment:
package com.bignerdranch.android.photogallery
import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.ColorDrawable
import android.graphics.drawable.Drawable
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
private lateinit var photoRecyclerView : RecyclerView
private lateinit var photoGalleryViewModel: PhotoGalleryViewModel
private lateinit var thumbnailDownloader: ThumbnailDownloader<PhotoGalleryFragment.PhotoHolder> //it should be PhotoHolder not Type or Handler
private const val TAG = "PhotoGalleryFragment"
class PhotoGalleryFragment:Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
retainInstance = true //page 511
photoGalleryViewModel = //page 494
ViewModelProvider(this).get(PhotoGalleryViewModel::class.java)
//thumbnailDownloader = ThumbnailDownloader() //p.513
val responseHandler = Handler(Looper.getMainLooper())//page 525
thumbnailDownloader =
ThumbnailDownloader(responseHandler){ photoHolder, bitmap ->
val drawable = BitmapDrawable(resources, bitmap)
photoHolder.bindDrawable(drawable)
}
lifecycle.addObserver(thumbnailDownloader.viewLifecycleObserver)
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
viewLifecycleOwner.lifecycle.addObserver( //page. 529
thumbnailDownloader.viewLifecycleObserver
)
val view = inflater.inflate(R.layout.fragment_photo_gallery, container, false)
photoRecyclerView = view.findViewById(R.id.photo_recycler_view)
photoRecyclerView.layoutManager = GridLayoutManager(context,3)
return view
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
photoGalleryViewModel.galleryItemLiveData.observe(
viewLifecycleOwner,
Observer { galleryItems ->
Log.d(TAG,"Have gallery items from ViewModel $galleryItems" )
photoRecyclerView.adapter = PhotoAdapter(galleryItems)
}
)
}
class PhotoHolder(private val itemImageView: ImageView)
: RecyclerView.ViewHolder(itemImageView){ //page 496
val bindDrawable: (Drawable) -> Unit = itemImageView::setImageDrawable
}
private inner class PhotoAdapter(private val galleryItems: List<GalleryItem>)
:RecyclerView.Adapter<PhotoHolder>(){
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PhotoHolder {
val view = layoutInflater.inflate(
R.layout.list_item_gallery,
parent,
false) as ImageView
return PhotoHolder(view)
}
override fun onBindViewHolder(holder: PhotoHolder, position: Int) {
val galleryItem = galleryItems[position]
//holder.bindTitle(galleryItem.title)
val placeholder: Drawable = ContextCompat.getDrawable(
requireContext(),
R.drawable.hala_atamleh
)?: ColorDrawable()
holder.bindDrawable(placeholder)
thumbnailDownloader.queueThumbnail(holder, galleryItem.url) //page 515
}
override fun getItemCount(): Int = galleryItems.size
}
companion object{
fun newInstance() = PhotoGalleryFragment()
}
override fun onDestroyView() { //page 530
super.onDestroyView()
thumbnailDownloader.clearQueue()
viewLifecycleOwner.lifecycle.removeObserver(
thumbnailDownloader.viewLifecycleObserver
)
}
override fun onDestroy() {
super.onDestroy()
lifecycle.removeObserver(
thumbnailDownloader.fragmentLifecycleObserver
)
}
}
我分两步解决了
1- 使请求处理程序可为空...感谢@Tenfour04
2- 以这种方式制作画廊
package com.bignerdranch.android.photogallery
import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.ColorDrawable
import android.graphics.drawable.Drawable
import android.os.Bundle
import android.os.Handler
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProviders
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
private const val TAG = "PhotoGalleryFragment"
class PhotoGalleryFragment : Fragment() {
private lateinit var photoGalleryViewModel: PhotoGalleryViewModel
private lateinit var photoRecyclerView: RecyclerView
private lateinit var thumbnailDownloader: ThumbnailDownloader<PhotoHolder>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
retainInstance = true
photoGalleryViewModel =
ViewModelProviders.of(this).get(PhotoGalleryViewModel::class.java)
val responseHandler = Handler()
thumbnailDownloader =
ThumbnailDownloader(responseHandler) { photoHolder, bitmap ->
val drawable = BitmapDrawable(resources, bitmap)
photoHolder.bindDrawable(drawable)
}
lifecycle.addObserver(thumbnailDownloader.fragmentLifecycleObserver)
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
viewLifecycleOwner.lifecycle.addObserver(
thumbnailDownloader.viewLifecycleObserver
)
val view = inflater.inflate(R.layout.fragment_photo_gallery, container, false)
photoRecyclerView = view.findViewById(R.id.photo_recycler_view)
photoRecyclerView.layoutManager = GridLayoutManager(context, 3)
return view
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
photoGalleryViewModel.galleryItemLiveData.observe(
viewLifecycleOwner,
Observer { galleryItems ->
Log.d(TAG, "Have gallery items from view model $galleryItems")
photoRecyclerView.adapter = PhotoAdapter(galleryItems)
})
}
override fun onDestroyView() {
super.onDestroyView()
thumbnailDownloader.clearQueue()
viewLifecycleOwner.lifecycle.removeObserver(
thumbnailDownloader.viewLifecycleObserver
)
}
override fun onDestroy() {
super.onDestroy()
lifecycle.removeObserver(
thumbnailDownloader.fragmentLifecycleObserver
)
}
private class PhotoHolder(private val itemImageView: ImageView) : RecyclerView.ViewHolder(itemImageView) {
val bindDrawable: (Drawable) -> Unit = itemImageView::setImageDrawable
}
private inner class PhotoAdapter(private val galleryItems: List<GalleryItem>) :
RecyclerView.Adapter<PhotoHolder>() {
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): PhotoHolder {
val view = layoutInflater.inflate(
R.layout.list_item_gallery,
parent,
false
) as ImageView
return PhotoHolder(view)
}
override fun getItemCount(): Int = galleryItems.size
override fun onBindViewHolder(holder: PhotoHolder, position: Int) {
val galleryItem = galleryItems[position]
val placeholder: Drawable = ContextCompat.getDrawable(
requireContext(),
R.drawable.bill_up_close
) ?: ColorDrawable()
holder.bindDrawable(placeholder)
thumbnailDownloader.queueThumbnail(holder, galleryItem.url)
}
}
companion object {
fun newInstance() = PhotoGalleryFragment()
}
}
这个项目是一个回收器视图片段,它从 flickr 获取图像并显示它。 我使用循环器和处理程序在回收器片段和下载缩略图片段之间进行通信...我正在使用 Android Studio Bumblebee...
我在使用 requestHandler 时遇到错误……也许我没有看到具体问题。但是我检查了几次代码都没有找到缺失的部分…
我收到这个错误:
kotlin.UninitializedPropertyAccessException: lateinit property requestHandler has not been initialized at com.bignerdranch.android.photogallery.ThumbnailDownloader.queueThumbnail(ThumbnailDownloader.kt:94)
指的是这个……
fun queueThumbnail(target: T, url: String){ //page 510
Log.i(TAG, "Got a URL: $url")
requestMap[target] = url //page 521
requestHandler.obtainMessage(MESSAGE_DOWNLOAD, target)
.sendToTarget()
}
Recyclerview 正在从另一个片段调用此代码
override fun onBindViewHolder(holder: PhotoHolder, position: Int) {
val galleryItem = galleryItems[position]
//holder.bindTitle(galleryItem.title)
val placeholder: Drawable = ContextCompat.getDrawable(
requireContext(),
R.drawable.hala_atamleh
)?: ColorDrawable()
holder.bindTitle(placeholder) //should be bindDrawable but it didn't work
--> thumbnailDownloader.queueThumbnail(holder, galleryItem.url) //page 515
}
据我所知,我在这里初始化了它:
@Suppress("UNCHECKED_CAST") //page 522
@SuppressLint("HandlerLeak")
override fun onLooperPrepared() {
requestHandler = object : Handler(Looper.getMainLooper()){
override fun handleMessage(msg: Message) {
if (msg.what == MESSAGE_DOWNLOAD){
val target = msg.obj as T
Log.i(TAG, "Got a request for URL: ${requestMap[target]}")
handleRequest(target)
}
}
}
}
我错过了什么导致这个错误?
这里是文件代码:
import android.annotation.SuppressLint
import android.graphics.Bitmap
import android.os.Handler
import android.os.HandlerThread
import android.os.Looper
import android.os.Message
import android.util.Log
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.OnLifecycleEvent
import java.util.concurrent.ConcurrentHashMap
private const val TAG = "ThumbnailDownloader"
private const val MESSAGE_DOWNLOAD = 0
class ThumbnailDownloader<in T>(private val responseHandler: Handler, //page. 524
private val onThumbnailDownloaded : (T, Bitmap) -> Unit)
: HandlerThread(TAG) /*, LifecycleObserver page 512*/ { //page. 510
private lateinit var requestHandler: Handler //page516++
private var hasQuit = false
private val requestMap = ConcurrentHashMap<T, String>()
private val flickrFetchr = FlickrFetchr()
val fragmentLifecycleObserver: LifecycleObserver = //page 527
object : LifecycleObserver{
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
fun setup() {
Log.i(TAG, "Starting background thread")
start() //page 514
looper
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
fun tearDown() {
Log.i(TAG, "Destroying background thread")
quit()
}
}
@Suppress("UNCHECKED_CAST") //page 522
@SuppressLint("HandlerLeak")
override fun onLooperPrepared() {
requestHandler = object : Handler(Looper.getMainLooper()){
override fun handleMessage(msg: Message) {
if (msg.what == MESSAGE_DOWNLOAD){
val target = msg.obj as T
Log.i(TAG, "Got a request for URL: ${requestMap[target]}")
handleRequest(target)
}
}
}
}
//page 528
val viewLifecycleObserver : LifecycleObserver =
object : LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
fun tearDown(){
Log.i(TAG, "Clearing all requests from Queue")
requestHandler.removeMessages(MESSAGE_DOWNLOAD)
requestMap.clear()
}
}
override fun quit(): Boolean {
hasQuit = true
return super.quit()
}
fun queueThumbnail(target: T, url: String){ //page 510
Log.i(TAG, "Got a URL: $url")
requestMap[target] = url //page 521
requestHandler.obtainMessage(MESSAGE_DOWNLOAD, target)
.sendToTarget()
}
fun clearQueue() {
requestHandler.removeMessages(MESSAGE_DOWNLOAD)
requestMap.clear()
}
private fun handleRequest(target: T){
val url = requestMap[target] ?: return
val bitmap = flickrFetchr.fetchPhoto(url) ?: return
responseHandler.post(Runnable { //page.526
if(requestMap[target] != url || hasQuit){
return@Runnable
}
requestMap.remove(target)
onThumbnailDownloaded(target, bitmap)
})
}
}
PHOTOGalleryFragment:
package com.bignerdranch.android.photogallery
import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.ColorDrawable
import android.graphics.drawable.Drawable
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
private lateinit var photoRecyclerView : RecyclerView
private lateinit var photoGalleryViewModel: PhotoGalleryViewModel
private lateinit var thumbnailDownloader: ThumbnailDownloader<PhotoGalleryFragment.PhotoHolder> //it should be PhotoHolder not Type or Handler
private const val TAG = "PhotoGalleryFragment"
class PhotoGalleryFragment:Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
retainInstance = true //page 511
photoGalleryViewModel = //page 494
ViewModelProvider(this).get(PhotoGalleryViewModel::class.java)
//thumbnailDownloader = ThumbnailDownloader() //p.513
val responseHandler = Handler(Looper.getMainLooper())//page 525
thumbnailDownloader =
ThumbnailDownloader(responseHandler){ photoHolder, bitmap ->
val drawable = BitmapDrawable(resources, bitmap)
photoHolder.bindDrawable(drawable)
}
lifecycle.addObserver(thumbnailDownloader.viewLifecycleObserver)
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
viewLifecycleOwner.lifecycle.addObserver( //page. 529
thumbnailDownloader.viewLifecycleObserver
)
val view = inflater.inflate(R.layout.fragment_photo_gallery, container, false)
photoRecyclerView = view.findViewById(R.id.photo_recycler_view)
photoRecyclerView.layoutManager = GridLayoutManager(context,3)
return view
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
photoGalleryViewModel.galleryItemLiveData.observe(
viewLifecycleOwner,
Observer { galleryItems ->
Log.d(TAG,"Have gallery items from ViewModel $galleryItems" )
photoRecyclerView.adapter = PhotoAdapter(galleryItems)
}
)
}
class PhotoHolder(private val itemImageView: ImageView)
: RecyclerView.ViewHolder(itemImageView){ //page 496
val bindDrawable: (Drawable) -> Unit = itemImageView::setImageDrawable
}
private inner class PhotoAdapter(private val galleryItems: List<GalleryItem>)
:RecyclerView.Adapter<PhotoHolder>(){
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PhotoHolder {
val view = layoutInflater.inflate(
R.layout.list_item_gallery,
parent,
false) as ImageView
return PhotoHolder(view)
}
override fun onBindViewHolder(holder: PhotoHolder, position: Int) {
val galleryItem = galleryItems[position]
//holder.bindTitle(galleryItem.title)
val placeholder: Drawable = ContextCompat.getDrawable(
requireContext(),
R.drawable.hala_atamleh
)?: ColorDrawable()
holder.bindDrawable(placeholder)
thumbnailDownloader.queueThumbnail(holder, galleryItem.url) //page 515
}
override fun getItemCount(): Int = galleryItems.size
}
companion object{
fun newInstance() = PhotoGalleryFragment()
}
override fun onDestroyView() { //page 530
super.onDestroyView()
thumbnailDownloader.clearQueue()
viewLifecycleOwner.lifecycle.removeObserver(
thumbnailDownloader.viewLifecycleObserver
)
}
override fun onDestroy() {
super.onDestroy()
lifecycle.removeObserver(
thumbnailDownloader.fragmentLifecycleObserver
)
}
}
我分两步解决了
1- 使请求处理程序可为空...感谢@Tenfour04
2- 以这种方式制作画廊
package com.bignerdranch.android.photogallery
import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.ColorDrawable
import android.graphics.drawable.Drawable
import android.os.Bundle
import android.os.Handler
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProviders
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
private const val TAG = "PhotoGalleryFragment"
class PhotoGalleryFragment : Fragment() {
private lateinit var photoGalleryViewModel: PhotoGalleryViewModel
private lateinit var photoRecyclerView: RecyclerView
private lateinit var thumbnailDownloader: ThumbnailDownloader<PhotoHolder>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
retainInstance = true
photoGalleryViewModel =
ViewModelProviders.of(this).get(PhotoGalleryViewModel::class.java)
val responseHandler = Handler()
thumbnailDownloader =
ThumbnailDownloader(responseHandler) { photoHolder, bitmap ->
val drawable = BitmapDrawable(resources, bitmap)
photoHolder.bindDrawable(drawable)
}
lifecycle.addObserver(thumbnailDownloader.fragmentLifecycleObserver)
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
viewLifecycleOwner.lifecycle.addObserver(
thumbnailDownloader.viewLifecycleObserver
)
val view = inflater.inflate(R.layout.fragment_photo_gallery, container, false)
photoRecyclerView = view.findViewById(R.id.photo_recycler_view)
photoRecyclerView.layoutManager = GridLayoutManager(context, 3)
return view
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
photoGalleryViewModel.galleryItemLiveData.observe(
viewLifecycleOwner,
Observer { galleryItems ->
Log.d(TAG, "Have gallery items from view model $galleryItems")
photoRecyclerView.adapter = PhotoAdapter(galleryItems)
})
}
override fun onDestroyView() {
super.onDestroyView()
thumbnailDownloader.clearQueue()
viewLifecycleOwner.lifecycle.removeObserver(
thumbnailDownloader.viewLifecycleObserver
)
}
override fun onDestroy() {
super.onDestroy()
lifecycle.removeObserver(
thumbnailDownloader.fragmentLifecycleObserver
)
}
private class PhotoHolder(private val itemImageView: ImageView) : RecyclerView.ViewHolder(itemImageView) {
val bindDrawable: (Drawable) -> Unit = itemImageView::setImageDrawable
}
private inner class PhotoAdapter(private val galleryItems: List<GalleryItem>) :
RecyclerView.Adapter<PhotoHolder>() {
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): PhotoHolder {
val view = layoutInflater.inflate(
R.layout.list_item_gallery,
parent,
false
) as ImageView
return PhotoHolder(view)
}
override fun getItemCount(): Int = galleryItems.size
override fun onBindViewHolder(holder: PhotoHolder, position: Int) {
val galleryItem = galleryItems[position]
val placeholder: Drawable = ContextCompat.getDrawable(
requireContext(),
R.drawable.bill_up_close
) ?: ColorDrawable()
holder.bindDrawable(placeholder)
thumbnailDownloader.queueThumbnail(holder, galleryItem.url)
}
}
companion object {
fun newInstance() = PhotoGalleryFragment()
}
}