第一步新建Activity
RecyclerView提供了三种布局管理器:
LinerLayoutManager 以垂直或者水平列表方式展示Item
GridLayoutManager 以网格方式展示Item
StaggeredGridLayoutManager 以瀑布流方式展示Item
private lateinit var prService: PrService
private var coAdapter: CoAdapter? = null
private lateinit var manager: GridLayoutManager
manager = GridLayoutManager(mContext, 3, GridLayoutManager.VERTICAL, false)
coAdapter = CoAdapter(mContext, mutableListOf())
coAdapter?.setBlankView(emptyView)
rv_coupon.layoutManager = manager
rv_coupon.adapter = coAdapter
prService = RetrofitManager().getDefaultClient(PrService::class.java)
第二步获取数据显示
private fun getData() {
prService.discountList()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(object : Disposable<RespMsg<MutableList<DistData>>>(mContext) {
override fun onNext(t: RespMsg<MutableList<DistData>>) {
super.onNext(t)
if (t.code == 200) {
if (null != t.data){
coAdapter?.list?.addAll(t.data)
coAdapter?.notifyDataSetChanged()
}
}
}
})
}
第三步是适配器
class CoAdapter(mContext: Context, val list: MutableList<DistData>) : RecyclerView.Adapter<RecyclerView.ViewHolder> {
private lateinit var mCouponOnClickListener: CouponOnClickListener
override fun itemCount(): Int {
return list.size
}
override fun onBindViewHolder(p0: RecyclerView.ViewHolder, p1: Int) {
if (p0 is RVViewHolder) {
val item = list[p1]
ImageUtils.displayCircleImage(p0.itemView.coupon_companyLogo_im,item.companyLogo)
p0.itemView.coupon_companyName_tv.text = item.companyName
if (list[p1]!!.dicountType ==0){
Glide.with(mContext).load(R.mipmap.coupon_voucher_yellow_bg).into(p0.itemView.coupon_im)
Glide.with(mContext).load(R.mipmap.coupon_voucher_dicount0_bg).into(p0.itemView.coupon_dicount_im)
} else if (list[p1]!!.dicountType ==1){
Glide.with(mContext).load(R.mipmap.coupon_voucher_blue_bg).into(p0.itemView.coupon_im)
Glide.with(mContext).load(R.mipmap.coupon_voucher_dicount1_bg).into(p0.itemView.coupon_dicount_im)
}
}
}
override fun createVH(parent: ViewGroup?, viewType: Int): RecyclerView.ViewHolder {
return RVViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item_coupon_lm, parent, false))
}
//回调
interface CouponOnClickListener {
fun coupponOnClickListener(position: Int)
}
fun setOnCheckedChangeListener(listener: CouponOnClickListener) {
this.mCouponOnClickListener = listener
}
}
class DistData(
val beginTime: String,
val companyLogo: String,
val companyName: String,
val content: String
)
第4步布局 获取后台返回的数据显示
@GET(DISCOUNT_LIST_URL)
fun discountList(): Flowable<RespMsg<MutableList<DistData>>>
第5步布局
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_coupon"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="23dp"
android:layout_marginTop="23dp"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
/>
第6步网络请求
public class RetrofitManager{
private Retrofit.Builder retrofitBuilder;
private Gson mGson;
public RetrofitManager() {
mGson = new GsonBuilder().serializeNulls().create();
retrofitBuilder = RetrofitBuilder.getInstance().getBuilder();
}
public <T> T getDefaultClient(Class<T> serviceClass) {
OkHttpClient client = OkHttpClientManager.getInstance().getBuilder().build();
return retrofitBuilder
.client(client)
.addConverterFactory(GsonConverterFactory.create(mGson))
.addCallAdapterFactory(RxJava2CallAdapterFactory.createWithScheduler(Schedulers.io()))
.build().create(serviceClass);
}
}
public class OkHttpClientManager {
private static final String TAG = "OkHttpClientManager";
private OkHttpClient.Builder builder;
private static OkHttpClientManager instance = null;
private OkHttpClientManager() {
builder = new OkHttpClient.Builder()
.connectTimeout(15, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.writeTimeout(15, TimeUnit.SECONDS)
.addInterceptor(ParamsInterceptor.getInstance())
.addInterceptor(LoggingInterceptor.getInstance());
}
public static OkHttpClientManager getInstance() {
if (instance == null) {
synchronized (OkHttpClientManager.class) {
if (instance == null) {
instance = new OkHttpClientManager();
}
}
}
return instance;
}
public OkHttpClient.Builder getBuilder() {
return builder;
}
}