Материал 3. Выразительный традиционный вид ListItemLayoutAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Материал 3. Выразительный традиционный вид ListItemLayout

Сообщение Anonymous »

Я проверил здесь https://github.com/material-comComponen ... expressive, как реализовать новый ListItemLayout для традиционного представления XML. Но это не работает, ничего не меняется. Вот как я это реализую:
item_report_file.xml Вот адаптер ReportFiles.

Код: Выделить всё

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"

val fileSizeString = Formatter.formatFileSize(itemView.context, reportFile.sizeBytes)
binding.textViewFileSize.text = "Size: $fileSizeString"
}
}

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
}
}
}
Как вы можете видеть, я уже расширил ReportFireViewHolder с помощью ListItemViewHolder, как показано в примере.
Пример:
Изображение


Подробнее здесь: https://stackoverflow.com/questions/797 ... ional-view
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»