如何在项目中使用RecyclerView

RecyclerView在项目中使用的越来越多,大家其越来越熟悉,今天我写一个RecyclerView的简单教程,第一次学习的同学可以看一下。废话不多说,直接来步骤。

1.写Adapter层

class MyGoodsAdapter (val list: MutableList<Model> = mutableListOf(), val callback: (id: Long) -> Unit) : RecyclerView.Adapter<MyGoodsAdapter.ViewHolder>() {
    override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
        val view = LayoutInflater.from(parent?.context).inflate(R.layout.adapter_mygoodlist,parent,false)
        return ViewHolder(view)
    }

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

    @SuppressLint("SetTextI18n")
    override fun onBindViewHolder(holder: ViewHolder?, position: Int) {

        val item = list[position]
        holder!!.view.apply {
            name.text = item.prodName

            Glide.with(this).load(item.imageUrl).into(iv)
        }
    }

    class ViewHolder(val view: View) : RecyclerView.ViewHolder(view)
}

2.里面的Model层

data class MyGoodsItemModel (
        val prodName: String,
        val imageUrl: String

      ): Serializable

model层大家可以按照自己的需求来写,Adapter里面需要什么数据,就写什么数据。

3.Adapter的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/iv"
        android:layout_width="@dimen/height_120"
        android:layout_height="@dimen/height_100"
        android:layout_marginStart="@dimen/height_10"
        android:layout_marginTop="@dimen/spacing_24"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="10dp"
        android:layout_marginTop="10dp"
        android:orientation="vertical"
        android:layout_weight="1"
        app:layout_constraintLeft_toRightOf="@+id/iv"
        app:layout_constraintBaseline_toBaselineOf="@+id/iv">

        <TextView
            android:id="@+id/name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:maxEms="6"
            android:layout_marginTop="20dp" />
    </LinearLayout>
    
</LinearLayout>

4.在MainActivity中绑定Adapter

private val myGoodsAdapter by lazy {
    MyGoodsAdapter(callback = { 
        
    })
}
rv_my_goods.apply {
    layoutManager = LinearLayoutManager(this@MyGoodsActivity)
    adapter = myGoodsAdapter
    addItemDecoration( SimpleDividerDecoration(context))
}

//设置下拉更多和上拉刷新

rv_my_goods.setLoadingMoreProgressStyle(ProgressStyle.BallSpinFadeLoader)
rv_my_goods.setLoadingMoreEnabled(true)
rv_my_goods.setPullRefreshEnabled(false)

loadMyGoodsList()  //使用retrofit2 从服务器加载数据

5. 加载数据的方法,见我的上一篇文章《一个简单的Retrofit 2.0项目实现》

private fun loadMyGoodsList() {
    val loading = DialogHelper.loading(this)
    val d = NetApi.getMyGoods(LocalDataManager.getCurrentUser()!!.userModel!!.pocCustId, "1", "1", "20")
            .compose(RxHelper.applyLoading(loading))
            .subscribe({ res ->
                handleData(res.data!!)
            })
    disposables.add(d)

}

按照上述步骤一步一步操作,你就可以实现一个简单的从服务器后台获取数据,并用RecyclerView来展示了。 

private fun handleData(data: MyGoodsListModel) {
    mList.clear()
    myGoodsAdapter.list_my_goods.clear()
    myGoodsAdapter.list_my_goods.addAll(data.records?: listOf())
    myGoodsAdapter.notifyDataSetChanged()
}

猜你喜欢

转载自blog.csdn.net/mlsnatalie/article/details/81180330