天天看点

RecyclerView怎么能没有ItemClickListener?加一个!

<code>RecyclerView</code>可以用来代替<code>ListView</code>来展现大量的数据。Google在<code>RecyclerView</code>中提升了性能,和更多好用的API。

使用<code>RecyclerView</code>不仅需要设置adapter,还需要设计值layout manager。

要创建adapter,需要继承并实现<code>RecyclerView.Adapter</code>和<code>RecyclerView.ViewHolder</code>。<code>RecyclerView</code>专门对view holder这部分的API做了一些优化。

```kotlin

/**

Created by uncle_charlie on 7/4/2016.

*/

class CategoryRecyelerAdapter(var context: Context, var categoryList: ArrayList)

: RecyclerView.Adapter() {.categoryviewholder&gt;

override fun onBindViewHolder(holder: CategoryViewHolder?, position: Int) {

val categoryInfo = categoryList.get(position)

Picasso.with(context).load(categoryInfo.imageUrl)

.resize(80, 80)

.into(holder?.categoryImageView)

}

override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): CategoryViewHolder? {

val layoutView = LayoutInflater.from(context).inflate(R.layout.category_grid_item, null)

var viewHolder = CategoryViewHolder(layoutView)

return viewHolder

override fun getItemCount(): Int {

return categoryList.count()

inner class CategoryViewHolder(var categoryView: View) : RecyclerView.ViewHolder(categoryView) {

var categoryImageView: ImageView? = null;

var categoryTextView: TextView? = null;

```

<code>CategoryViewHolder</code>继承<code>RecyclerView.ViewHolder</code>。构造函数需要一个<code>View</code>类型的参数。使用这个view来获得view holder里hold的view,比如这里的image view和text view。

<code>onCreateViewHolder()</code> 创建view holder。<code>val layoutView = LayoutInflater.from(context).inflate(...)</code>,解析<code>RecyclerView</code>的每一个item的layout。并把这个解析之后的view传入前面说的view holder。

<code>onBindViewHolder()</code>,这里就是给view holder里的view赋值,比如这里用<code>Picasso</code>给image view设置图片:<code>Picasso.with(context)...into(holder?.categoryImageView)</code>。

<code>getItemCount()</code>数据源里有多少数据。

如何使用:

参考:

<a href="http://sapandiwakar.in/recycler-view-item-click-handler/">http://sapandiwakar.in/recycler-view-item-click-handler/</a>

欢迎加群互相学习,共同进步。QQ群:iOS: 58099570 | Android: 572064792 | Nodejs:329118122 做人要厚道,转载请注明出处!

本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/sunshine-anycall/p/5377743.html,如需转载请自行联系原作者

继续阅读