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() }