I'm trying to create a recyclerview which can change layout (a list or a grid), for that I modified my adapter to determine the which layout it should use according to the number of spans. But when I try to modify the information from the holder nothing is happening. Does anyone have an idea?
here's my adapter:
class FileAdapter(
private val context: Context,
private val layoutManager: GridLayoutManager,
private var items:MutableList<File>,
private val isFolder:Boolean = false
) : RecyclerView.Adapter<FileAdapter.FileViewHolder>() {
companion object {
private val LIST = 1
private val GRID = 3
private val VIEW_TYPE_LIST = 1
private val VIEW_TYPE_GRID = 2
}
override fun getItemViewType(position: Int): Int {
val spanCount: Int = layoutManager.spanCount
return if (spanCount == LIST) {
VIEW_TYPE_LIST
} else {
VIEW_TYPE_GRID
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType : Int):FileViewHolder{
val view : View
if(!isFolder) {
if (viewType == VIEW_TYPE_GRID) {
view = LayoutInflater.from(parent.context).inflate(R.layout.file_element, parent, false)
} else {
view = LayoutInflater.from(parent.context).inflate(R.layout.file_list_element, parent, false)
}
} else
view = LayoutInflater.from(parent.context).inflate(R.layout.folder_element, parent, false)
return FileViewHolder(view, viewType)
}
class FileViewHolder(view : View, viewType: Int) : RecyclerView.ViewHolder(view) {
var fileName: TextView? = null
var fileImg: ImageView? = null
var fileSize: TextView? = null
init {
if (viewType == VIEW_TYPE_GRID) {
val fileName = view.findViewById<TextView>(R.id.file_name)
var fileImg = view.findViewById<ImageView>(R.id.file_img)
} else {
val fileName = view.findViewById<TextView>(R.id.file_name)
var fileImg = view.findViewById<ImageView>(R.id.file_img)
var fileSize = view.findViewById<TextView>(R.id.file_size)
}
}
}
override fun onBindViewHolder(holder: FileViewHolder, position: Int) {
val currentFile = items[position]
holder.fileName?.text = currentFile.name
if(currentFile.isDirectory)
//holder.fileImg.setImageResource(getDrawable(R.drawable.ic_folder))
else if(currentFile.extension=="pdf"){
//holder.fileImg.setImageResource(R.drawable.ic_pdf)
CoroutineScope(Dispatchers.Default).launch {
val bitmapPdf = pdfToBitmap(currentFile)
CoroutineScope(Dispatchers.Main).launch {
holder.fileImg?.setImageBitmap(bitmapPdf)
}
}
}
else if(currentFile.extension=="docx")
holder.fileImg?.setImageResource(R.drawable.ic_docx)
else if(currentFile.extension=="xlsx")
holder.fileImg?.setImageResource(R.drawable.ic_xlsx)
else
holder.fileImg?.setImageResource(R.drawable.ic_file)
}
override fun getItemCount() = items.size
}