您的位置:首页 > 移动开发 > Android开发

对recyclerview的简单封装

2017-05-26 11:02 260 查看
不多说,先直接上代码,看一下封装后的使用,避免写重复过多的代码(直接翻译为java代码也是一样的原理)

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var adapter = RecycleAdapter(this,initData()!! ,R.layout.recyclerview_item)
recycler_view.layoutManager = LinearLayoutManager(this)
recycler_view.adapter = adapter
adapter.setOnBindViewHolder(object : RecycleAdapter.BindViewHolder<TestVar>{
override fun onBind(p0: RecycleAdapter.MyViewHolder?, p1: Int, content: TestVar) {
var test = p0!!.getView(R.id.name) as TextView
var id = p0.getView(R.id.num) as TextView
test.text = content.name
id.setOnClickListener { //添加监听事件
Log.d("tag","ididiididiid--------"+id)
}
}
})
adapter.addData(initData()!!)//再次添加数据
}

private fun initData(): ArrayList<TestVar>? {
var list=ArrayList<TestVar>()
for (i in 0..50){
var test = TestVar(i.toString(),"测试"+i,R.mipmap.ic_launcher)
list.add(i,test)
}
Log.d("tag","list.size------"+ list.size)
return list
}
}
recycleAdapter类

class RecycleAdapter<T> : RecyclerView.Adapter<RecycleAdapter.MyViewHolder> {
var context:Context
var list:ArrayList<T>
var layout:Int? = null
var bind:BindViewHolder<T>? = null
constructor(context:Context,list:ArrayList<T>,layout:Int){
this.context = context
this.list = list
this.layout = layout
notifyDataSetChanged()
}
fun setOnBindViewHolder(bind:BindViewHolder<T>){
this.bind = bind
}

fun addData(list:ArrayList<T>){
if (list != null){
this.list.addAll(list)
}else{
this.list = list
}
notifyDataSetChanged()
}

override fun onBindViewHolder(p0: MyViewHolder?, p1: Int) {
bind?.onBind(p0,p1,list[p1])
}

override fun onCreateViewHolder(p0: ViewGroup?, p1: Int): MyViewHolder {
var res = context.resources
return MyViewHolder(LayoutInflater.from(context).inflate(res.getLayout(layout!!), p0, false))

}

override fun getItemCount(): Int {
return list.size
}

class MyViewHolder : RecyclerView.ViewHolder {
var view:View? =null
constructor(view:View) : super(view) {
this.view = view
}
fun getView(id:Int):View{
return view!!.findViewById(id)
}

}
interface BindViewHolder<in T>{
fun onBind(p0: MyViewHolder?, p1: Int,content : T)
}
}

其他类型的封装原理也是一样的,如果能有更好的封装,希望童鞋们能相互交流(正在寻找更好的封装中。。)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android kotlin