Skip to content

Instantly share code, notes, and snippets.

@oogatta
Created October 1, 2017 05:58
Show Gist options
  • Save oogatta/ce6a79da7ba47434dcb47a138b2fbc68 to your computer and use it in GitHub Desktop.
Save oogatta/ce6a79da7ba47434dcb47a138b2fbc68 to your computer and use it in GitHub Desktop.
class MainActivity : AppCompatActivity() {
lateinit var adapter: RecyclerView.Adapter<RecyclerView.ViewHolder>
var vmList = arrayListOf<MySweetViewModelable>()
override fun onCreate(savedInstanceState: Bundle?) {
// Title
vmList.add(TitleViewModel("Hello, Ebisu!"))
// ...
adapter = MySweetAdapter(vmList)
my_sweet_recycler_view.adapter = adapter
}
}
interface MySweetViewModelable {}
class TitleViewModel(val text: String): MySweetViewModelable
// ...
class MySweetAdapter(val vmList: List<MySweetViewModelable>) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
// ...
class TitleViewHolder(val binding: TitleBinding) : RecyclerView.ViewHolder(binding.root) {
fun bind(vm: TitleViewModel) {
binding.vm = vm
}
}
// x2
override fun onBindViewHolder(holder: RecyclerView.ViewHolder?, position: Int) {
when (holder!!.itemViewType) {
ViewType.TITLE.type -> {
println("onBindViewHolder: TITLE")
(holder as? TitleViewHolder)?.bind(vmList[position] as TitleViewModel)
}
ViewType.FEED.type -> { // ... }
ViewType.FOOTER.type -> { // ... }
}
}
override fun getItemCount(): Int = vmList.size
override fun getItemViewType(position: Int): Int {
return when (position) {
0 -> ViewType.TITLE.type
in 1..vmList.size - 2 -> ViewType.FEED.type
vmList.size - 1 -> ViewType.FOOTER.type
else -> ViewType.FEED.type
}
}
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): RecyclerView.ViewHolder {
return when (viewType) {
ViewType.TITLE.type -> TitleViewHolder(TitleBinding.inflate(LayoutInflater.from(parent!!.context), parent, false))
ViewType.FEED.type -> FeedViewHolder(FeedBinding.inflate(LayoutInflater.from(parent!!.context), parent, false))
ViewType.FOOTER.type -> FooterViewHolder(FooterBinding.inflate(LayoutInflater.from(parent!!.context), parent, false))
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment