Kotlin Adapter
From zen2
Basic
This will create a lot of reads, so only good for small data sets
- Create a List View to display your items
- In a separate layout file create an item view
- Create a new file with Kotlin Class, call it XXXAdapter or whatever. eg
class CategoryAdapter(context:Context, categories:List<Category>): BaseAdapter() {}
You will have to override getView, getItem, getItemId, getCount
class CategoryAdapter(context:Context, categories:List<Category>): BaseAdapter() {
val context = context
val categories = categories
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
val categoryView :View
categoryView = LayoutInflater.from(context).inflate(R.layout.category_list_item,null)
val resourceID = context.resources.getIdentifier(categories[position].image,"drawable",context.packageName)
categoryView.categoryImage.setImageResource(resourceID)
categoryView.categoryText.text = categories[position].title
return categoryView
}
override fun getItem(position: Int): Any {
return categories[position]
}
override fun getItemId(position: Int): Long {
return 0
}
override fun getCount(): Int {
return categories.count()
}
}
Then in MainActivity or where you are calling this from:
class MainActivity : AppCompatActivity() {
lateinit var adapter:CategoryAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
adapter = CategoryAdapter(this,DataService.categories)
categoryListView.adapter = adapter
}
}
Using a Holder
A holder will hold the view for reusing
class CategoryAdapter(context:Context, categories:List<Category>): BaseAdapter() {
val context = context
val categories = categories
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
val categoryView :View
val holder: ViewHolder
if (convertView == null) { //The first time the views are presented
categoryView = LayoutInflater.from(context).inflate(R.layout.category_list_item,null)
holder = ViewHolder()
holder.categoryImage = categoryView.findViewById(R.id.categoryImage)
holder.categoryTitle = categoryView.findViewById(R.id.categoryText)
println("I exist for the first time")
categoryView.tag = holder
} else {
holder = convertView.tag as ViewHolder
categoryView = convertView
println("Recycled")
}
val category = categories[position]
val resourceID = context.resources.getIdentifier(categories[position].image,"drawable",context.packageName)
holder.categoryImage?.setImageResource(resourceID)
holder.categoryTitle?.text = category.title
return categoryView
}
override fun getItem(position: Int): Any {
return categories[position]
}
override fun getItemId(position: Int): Long {
return 0
}
override fun getCount(): Int {
return categories.count()
}
private class ViewHolder {
var categoryImage: ImageView? = null
var categoryTitle: TextView? = null
}
}
