Я проверил здесь https://github.com/material-comComponen ... expressive, как реализовать новый ListItemLayout для традиционного представления XML. Но это не работает, ничего не меняется. Вот как я это реализую:
item_report_file.xml
Я проверил здесь https://github.com/material-comComponents/material-comComponents-android/blob/master/docs/comComponents/List.md#m3-expressive, как реализовать новый ListItemLayout для традиционного представления XML. Но это не работает, ничего не меняется. Вот как я это реализую: item_report_file.xml [code]
[/code] Вот адаптер ReportFiles. [code]class ReportFilesAdapter( private val onItemClicked: (GenerateReportViewModel.ReportFileInfo) -> Unit, private val onItemLongClicked: (GenerateReportViewModel.ReportFileInfo) -> Unit ) : ListAdapter( ReportFileDiffCallback() ) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ReportFileViewHolder { val binding = ItemReportFileBinding.inflate(LayoutInflater.from(parent.context), parent, false) return ReportFileViewHolder(binding) }
override fun onBindViewHolder(holder: ReportFileViewHolder, position: Int) { val reportFile = getItem(position) holder.itemView.setOnClickListener { onItemClicked(reportFile) }
// Set long click listener for the item view holder.itemView.setOnLongClickListener { onItemLongClicked(reportFile) true } holder.bind(reportFile) }
inner class ReportFileViewHolder(private val binding: ItemReportFileBinding) : ListItemViewHolder(binding.root) {
fun bind(reportFile: GenerateReportViewModel.ReportFileInfo) { binding.textViewFileName.text = reportFile.name binding.textViewFilePath.text = reportFile.path
val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()) val dateString = sdf.format(Date(reportFile.dateModifiedMillis)) binding.textViewFileDate.text = "Created: $dateString"
class ReportFileDiffCallback : DiffUtil.ItemCallback() { override fun areItemsTheSame( oldItem: GenerateReportViewModel.ReportFileInfo, newItem: GenerateReportViewModel.ReportFileInfo ): Boolean { return oldItem.path == newItem.path }
override fun areContentsTheSame( oldItem: GenerateReportViewModel.ReportFileInfo, newItem: GenerateReportViewModel.ReportFileInfo ): Boolean { return oldItem == newItem } } } [/code] Как вы можете видеть, я уже расширил ReportFireViewHolder с помощью ListItemViewHolder, как показано в примере. Пример: [img]https://i.sstatic.net/Yjq1bftx.png[/img]