Android中RecyclerView的简单实现

效果图

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);

猜你喜欢

转载自blog.csdn.net/ymtianyu/article/details/109023591
今日推荐