Indu
04/06/2022, 11:37 PMIndu
04/06/2022, 11:39 PMIndu
04/06/2022, 11:40 PMIndu
04/06/2022, 11:50 PMIndu
04/06/2022, 11:50 PMclass SampleAdapter: ComposeListAdapter<ArrayList<ArrayList<String>>, SampleAdapter.SampleViewHolder>(VisitDiffCallback()) {
    class SampleViewHolder(
        composeView: ComposeView
    ) : ComposeViewHolder(composeView) {
        @Composable
        override fun ViewHolder() {
            val historyItems = ReminderUtil.getHistory()
            Column(
                Modifier
                    .fillMaxWidth()
                    .padding(16.dp)) {
                historyItems.forEachIndexed{ index, history ->
                    Card(backgroundColor = Color.Yellow){
                        LazyRow(
                            Modifier.fillMaxWidth(),
                            contentPadding = PaddingValues(horizontal = 8.dp),
                            horizontalArrangement = Arrangement.spacedBy(8.dp)
                        ) {
                            itemsIndexed(history) { index, items ->
                                Column(
                                    Modifier
                                        .fillMaxWidth()
                                        .padding(16.dp)) {
                                    items.forEach { item ->
                                        Text(color= Color.DarkGray,text = item)
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    
    override fun onBindViewHolder(holder: SampleViewHolder, position: Int) {
        holder.bindViewHolder()
    }
    private class VisitDiffCallback : DiffUtil.ItemCallback<ArrayList<ArrayList<String>>>() {
        override fun areItemsTheSame(oldItem: ArrayList<ArrayList<String>>, newItem: ArrayList<ArrayList<String>>): Boolean {
            return oldItem == newItem
        }
        override fun areContentsTheSame(oldItem: ArrayList<ArrayList<String>>, newItem: ArrayList<ArrayList<String>>): Boolean {
            return oldItem == newItem
        }
    }
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SampleViewHolder {
        return SampleViewHolder(ComposeView(parent.context))
    }
}Indu
04/06/2022, 11:51 PMabstract class ComposeViewHolder(val composeView: ComposeView,
) : RecyclerView.ViewHolder(composeView) {
    @Composable
    abstract fun ViewHolder()
    init {
        composeView.setViewCompositionStrategy(
            ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed
        )
    }
    fun bindViewHolder() {
        composeView.setContent {
            ViewHolder()
        }
    }
}
abstract class ComposeListAdapter<T, VH : ComposeViewHolder>(
    diffCallback: DiffUtil.ItemCallback<T>
) : ListAdapter<T, VH>(diffCallback) {
    override fun onViewRecycled(holder: VH) {
        holder.composeView.disposeComposition()
        super.onViewRecycled(holder)
    }
}