Newer
Older
Endoscope / app / src / main / java / com / casic / endoscope / adapter / MediaFileAdapter.kt
package com.casic.endoscope.adapter

import android.content.Context
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.casic.endoscope.R
import com.pengxh.kt.lite.adapter.ViewHolder
import java.io.File

abstract class MediaFileAdapter(
    context: Context, private val dataRows: MutableList<File>
) : RecyclerView.Adapter<ViewHolder>() {

    private val inflater: LayoutInflater = LayoutInflater.from(context)
    private val TYPE_VIDEO = 0
    private val TYPE_IMAGE = 1

    override fun getItemCount(): Int = dataRows.size

    override fun getItemViewType(position: Int): Int {
        return if (dataRows[position].name.endsWith(".mp4")) {
            TYPE_VIDEO
        } else {
            TYPE_IMAGE
        }
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        return if (viewType == TYPE_VIDEO) {
            ViewHolder(inflater.inflate(R.layout.item_video_list_gv, parent, false))
        } else {
            ViewHolder(inflater.inflate(R.layout.item_image_list_gv, parent, false))
        }
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val file = dataRows[position]
        if (holder.itemViewType == TYPE_VIDEO) {
            bindVideoRes(holder, position, dataRows[position])
        } else {
            bindImageRes(holder, dataRows[position])
        }

        holder.itemView.setOnClickListener {
            itemClickedListener?.onItemClicked(file)
        }
    }

    abstract fun bindVideoRes(child: ViewHolder, childPos: Int, item: File)
    abstract fun bindImageRes(child: ViewHolder, item: File)

    private var itemClickedListener: OnItemClickedListener? = null

    interface OnItemClickedListener {
        fun onItemClicked(item: File)
    }

    fun setOnItemClickedListener(listener: OnItemClickedListener) {
        itemClickedListener = listener
    }
}