效果图
![](https://gitee.com/zqunyan/ImgRepository/raw/master/img/20201012105333.png)
Layout
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_desktop_appsort"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_desktop_sort_label1" />
Adapter
非常用的BaseAdapter,而是RecyclerView.Adapter
//此处一定要加载<VH>为自定义的 ViewHolder 类
public class SortAdapter extends RecyclerView.Adapter<SortAdapter.myViewHolder> {
private ArrayList<AppPackage> lstApps;
private Context mContext;
public SortAdapter(Context context, ArrayList<AppPackage> lstApps) {
this.mContext = context;
this.lstApps = lstApps;
}
@NonNull
@Override
public myViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//绑定加载布局页面
View view = LayoutInflater.from(mContext).inflate(R.layout.widget_desktop_item, parent, false);
return new myViewHolder(view, mContext);
}
@Override
public void onBindViewHolder(@NonNull myViewHolder holder, int position) {
//给控件赋值
AppPackage appPackage = lstApps.get(position);
holder.tv_app_label.setText(appPackage.getAppLabel());
//Bitmap 转 Drawable
Drawable drawable = new BitmapDrawable(mContext.getResources(), appPackage.getAppIcon());
holder.iv_app_icon.setImageDrawable(drawable);
}
@Override
public int getItemCount() {
return lstApps.size();
}
//一定要自定义 ViewHolder类
//在此类中进行布局控件的绑定以供数据赋值
static class myViewHolder extends RecyclerView.ViewHolder {
TextView tv_app_label;
ImageView iv_app_icon;
public myViewHolder(@NonNull View itemView, Context context) {
super(itemView);
tv_app_label = (TextView) itemView.findViewById(R.id.tv_widget_desktop_label);
iv_app_icon = (ImageView) itemView.findViewById(R.id.iv_widget_desktop_icon);
}
}
}
Activity
//初使化自定义的数据类
private ArrayList<AppPackage> lstApps = new ArrayList<AppPackage>();
//数据源
lstApps.add(new AppPackage(strLabel, strPackage, bmpIcon));
...
//自定义的 RecyclerView.Adapter
SortAdapter sortAdapter = new SortAdapter(this, lstApps);
//设置列表显示样式,常用的有 LinearLayoutManager 和 GridLayoutManager
mView.rvDesktopAppsort.setLayoutManager(new GridLayoutManager(this, 5));
//绑定列表数据
mView.rvDesktopAppsort.setAdapter(sortAdapter);