Kotlin和RecyclerView的一个demo

Kotlin和RecyclerView的一个demo

Kotlin最近比较火,我简单学了一下,写了个小demo,RecyclerView的.

1.使用到的东西

2.需要引入的库

implementation 'com.android.support:recyclerview-v7:26.0.0'
implementation 'com.squareup.okhttp3:okhttp:3.8.1'
implementation 'io.reactivex.rxjava2:rxjava:2.1.2'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
implementation 'com.google.code.gson:gson:2.8.1'
implementation 'com.github.bumptech.glide:glide:4.0.0'
复制代码

3.首先来看一下RecyclerView子项的布局吧

item_news.xml 就是一个ImageView和一个TextView


	<?xml version="1.0" encoding="utf-8"?>
	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	              android:layout_width="match_parent"
	              android:layout_height="100dp"
	              android:background="#7dd9da"
	              android:gravity="center_vertical"
	              android:orientation="horizontal">
	
	    <ImageView
	        android:id="@+id/iv_news_des"
	        android:layout_width="80dp"
	        android:layout_height="80dp"
	        android:layout_marginStart="10dp"
	        android:scaleType="centerCrop"
	        android:src="@mipmap/ic_launcher"/>
	
	    <TextView
	        android:id="@+id/tv_news_title"
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:layout_marginStart="10dp"
	        android:ellipsize="end"
	        android:maxLines="1"
	        android:text="震惊...."
	        android:textColor="#AA000000"
	        android:textSize="20sp"
	        />
	
	</LinearLayout>

复制代码

4.model,模型类


	/**
	 * description:
	 * author feiyang
	 * create at 2017/8/3 17:37
	 */
	data class News(
	
	        @SerializedName("author_name")
	        var authorName: String?,
	        @SerializedName("category")
	        var category: String?,
	        @SerializedName("date")
	        var date: String?,
	        @SerializedName("thumbnail_pic_s")
	        var thumbnailPicS: String?,
	        @SerializedName("title")
	        var title: String?,
	        @SerializedName("uniquekey")
	        var uniquekey: String?,
	        @SerializedName("url")
	        var url: String?
	
	)

复制代码

5.adapter(*重要)


	/**
	 * description:RecyclerView的adapter
	 * author feiyang
	 * create at 2017/8/3 17:41
	 */
	class NewsAdapter : RecyclerView.Adapter
	<NewsAdapter.ViewHolder> {
	
	    private var context: Context? = null
	    private var newsList: ArrayList<News>? = null
	
	    //这是构造方法
	    constructor(context: Context, newsList: ArrayList<News>) {
	        this.context = context
	        this.newsList = newsList
	    }
	
	    class ViewHolder : RecyclerView.ViewHolder {
	
	        var ivDes: ImageView
	        var tvTitle: TextView
	
	        constructor(itemView: View) : super(itemView) {
	            ivDes = itemView.findViewById(R.id.iv_news_des)
	            tvTitle = itemView.findViewById(R.id.tv_news_title)
	        }
	    }
	
	    override fun onBindViewHolder(holder: ViewHolder?, position: Int) {
	        if (newsList?.size as Int > position) {
	            val news = newsList?.get(position)
	            //使用Glide加载图片
	            Glide.with(context).load(news?.thumbnailPicS).into(holder?.ivDes)
	            //设置标题
	            holder?.tvTitle?.text = news?.title
	        }
	    }
	
	    override fun getItemCount(): Int {
	        return newsList?.size as Int
	    }
	
	    override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
	        val view = LayoutInflater.from(parent?.context).inflate(R.layout.item_news, parent, false)
	        return ViewHolder(view)
	    }
	
	    /**
	     * 添加数据
	     */
	    fun addData(dataList: ArrayList<News>): Unit {
	        //这里不用像java一样判断空了,这里肯定是非空的
	        if (dataList.size == 0) {
	            return
	        }
	        newsList?.addAll(dataList)
	        notifyDataSetChanged()
	    }
	
	    /**
	     * 更新数据
	     */
	    fun updateData(dataList: ArrayList<News>): Unit {
	        if (dataList.size==0) {
	            return
	        }
	        newsList?.clear()
	        newsList?.addAll(dataList)
	        notifyDataSetChanged()
	    }
	
	}

复制代码

最后

核心代码就在上面了,如果想要完整代码的话,去这里下载 不要积分....

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值