kotlin+mvvm+databinding+recyclerview
上一篇讲了activity跟xml,今天来看看adapter与viewmodel
class Adapter<T>(
@LayoutRes val resource: Int,
val listener: Any? = null
) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private val data: List<T>
get() = _data.toList()
private val _data: MutableList<T> = mutableListOf()
//这个function有更好的写法,因为我现在这样写若是recyclerview有移动还是会被刷新
fun updateData(list: ArrayList<T>){
_data.clear()
_data.addAll(list)
notifyDataSetChanged()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
val layoutInflater = LayoutInflater.from(parent.context)
val binding = DataBindingUtil.inflate<ViewDataBinding>(layoutInflater, resource, parent,false)
return MyViewHolder(binding)
}
override fun getItemCount(): Int {
return data.size
}
//这边的<*>简单来说就是表任何型态
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if (holder is Adapter<*>.MyViewHolder){
val item = data[position]
if (item != null)
holder.setupData(item)
}
}
//这边是包在里面的class记得要用inner否则会被预设为外面
inner class MyViewHolder( var binding: ViewDataBinding):RecyclerView.ViewHolder(binding.root){
fun setupData(post: Any){
binding.setVariable(BR.Post, post)
binding.setVariable(BR.listener, listener)
}
}
}
再来是viewmodel
class ViewModel(application: Application): AndroidViewModel(application) , Listener<Post>{
override fun onClick(post: Post){
Toast.makeText(getApplication(), post.post, Toast.LENGTH_SHORT).show()
}
val data = MutableLiveData<ArrayList<Post>>()
val listener:Listener<Post>? = this
fun fetchData(){
val tempArr = ArrayList<Post>()
tempArr.add(Post(post = "1"))
tempArr.add(Post(post = "2"))
tempArr.add(Post(post = "3"))
data.value = tempArr
}
}
这边我简单的做了一笔假资料然後因为我需要getApplication所以要使用AndroidViewModel,他是继承於viewmodel而且可以传application若只使用viewmodel,就无法使用application``
<<: Ruby on Rails RESTful 网址设计
可视为 in memeory DB, 具高效低延迟的特性 AWS ElastiCache 提供托管...
呃,首先呢~ 敝人小弟在下我今天仔细的思考了一下,决定这次还是再来一篇『中场休息』科普文,等到明天再...
event 事件 JavaScript 是个事件驱动 ( Event-driven ) 的语⾔ 浏览...
Abstract 随者Spring各种嗨到爆的注解模式来势汹汹,满足所有开发者配置各类型的元件注解,...
运动控制:关键词是“控制理论”; 控制系统可以视为具有四种机能的系统:量测(检测参数)、比较、计算及...