对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)
}
}
其他类型的封装原理也是一样的,如果能有更好的封装,希望童鞋们能相互交流(正在寻找更好的封装中。。)
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)
}
}
其他类型的封装原理也是一样的,如果能有更好的封装,希望童鞋们能相互交流(正在寻找更好的封装中。。)
相关文章推荐
- RecyclerView 使用的简单封装
- RecyclerView 上拉加载的简单封装
- RecyclerView Adapter简单封装
- 擦!RecyclerView的适配器确实比listview的简单些,因为tag都做了封装了
- RecyclerViewAdapter的简单封装
- 简单封装RecyclerView的Adapter
- 对RecyclerView的封装,使用简单,功能丰富
- RecyclerView适配器的简单封装-BaseAdapter
- RecyclerView的适配器简单封装,再也不用重复写适配器了
- Materialdesign-recyclerview简单封装
- Android中RecyclerView的适配器的简单封装
- Recyclerview的一些个人理解与使用(一)adapter的简单封装
- RecyclerView 的简单封装
- RecyclerView.Adapter 的简单封装
- RecyclerView 的简单使用
- RecyclerView介绍(一)----简单概述
- RecyclerView的简单使用
- 简单封装按钮-调整内部label和imageView的相对位置
- 实现对UIAlertController和UIAlertView判断系统后的简单封装
- Android新特性之RecyclerView的简单使用