mirror of
				https://git.suyu.dev/suyu/suyu.git
				synced 2025-10-31 14:56:40 +08:00 
			
		
		
		
	android: Create generic adapter and viewholder
Eliminates repeated code associated with every async differ list
This commit is contained in:
		
							parent
							
								
									6533dfd7ce
								
							
						
					
					
						commit
						51ad2d10de
					
				| @ -0,0 +1,33 @@ | ||||
| // SPDX-FileCopyrightText: 2024 yuzu Emulator Project | ||||
| // SPDX-License-Identifier: GPL-2.0-or-later | ||||
| 
 | ||||
| package org.yuzu.yuzu_emu.adapters | ||||
| 
 | ||||
| import android.annotation.SuppressLint | ||||
| import androidx.recyclerview.widget.AsyncDifferConfig | ||||
| import androidx.recyclerview.widget.DiffUtil | ||||
| import androidx.recyclerview.widget.ListAdapter | ||||
| import org.yuzu.yuzu_emu.viewholder.AbstractViewHolder | ||||
| import androidx.recyclerview.widget.RecyclerView | ||||
| 
 | ||||
| /** | ||||
|  * Generic adapter that implements an [AsyncDifferConfig] and covers some of the basic boilerplate | ||||
|  * code used in every [RecyclerView]. | ||||
|  * Type assigned to [Model] must inherit from [Object] in order to be compared properly. | ||||
|  */ | ||||
| abstract class AbstractDiffAdapter<Model : Any, Holder : AbstractViewHolder<Model>> : | ||||
|     ListAdapter<Model, Holder>(AsyncDifferConfig.Builder(DiffCallback<Model>()).build()) { | ||||
|     override fun onBindViewHolder(holder: Holder, position: Int) = | ||||
|         holder.bind(currentList[position]) | ||||
| 
 | ||||
|     private class DiffCallback<Model> : DiffUtil.ItemCallback<Model>() { | ||||
|         override fun areItemsTheSame(oldItem: Model & Any, newItem: Model & Any): Boolean { | ||||
|             return oldItem === newItem | ||||
|         } | ||||
| 
 | ||||
|         @SuppressLint("DiffUtilEquals") | ||||
|         override fun areContentsTheSame(oldItem: Model & Any, newItem: Model & Any): Boolean { | ||||
|             return oldItem == newItem | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,18 @@ | ||||
| // SPDX-FileCopyrightText: 2024 yuzu Emulator Project | ||||
| // SPDX-License-Identifier: GPL-2.0-or-later | ||||
| 
 | ||||
| package org.yuzu.yuzu_emu.viewholder | ||||
| 
 | ||||
| import androidx.recyclerview.widget.RecyclerView | ||||
| import androidx.viewbinding.ViewBinding | ||||
| import org.yuzu.yuzu_emu.adapters.AbstractDiffAdapter | ||||
| import org.yuzu.yuzu_emu.adapters.AbstractListAdapter | ||||
| 
 | ||||
| /** | ||||
|  * [RecyclerView.ViewHolder] meant to work together with a [AbstractDiffAdapter] or a | ||||
|  * [AbstractListAdapter] so we can run [bind] on each list item without needing a manual hookup. | ||||
|  */ | ||||
| abstract class AbstractViewHolder<Model>(binding: ViewBinding) : | ||||
|     RecyclerView.ViewHolder(binding.root) { | ||||
|     abstract fun bind(model: Model) | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user