android - 在 RecyclerView 中绘制空单元格

标签 android android-recyclerview gridlayoutmanager

在我的例子中,我有带有 Grid Layout Manager 和自定义 Decorator 的回收 View 。每行(最多 3 列)可以是 1 到 3 个项目。

问题是当行中的项目数为一或两个时如何绘制空单元格? 警告!!!这不是 lastRow!

例子: Span count in row 3, elements from collection to draw = 2 如何在第三列绘制空单元格? Span count in row 3, elements from collection to draw = 1 如何在第二列和第三列绘制空单元格?

最佳答案

Recyclerview 的适配器必须知道 View 。为此,我们使用 getItemViewType。通过获取 View 类型,我们可以将任何 View 添加到 recyclerview。

public class MainRecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

private final static int ADD_VIEW_HOLDER = 0;
private final static int EMPTY_VIEW_HOLDER = 1;

public List<DataList> mDrinkItems;


@Override
public int getItemViewType(int position) {
    if (position== mDrinkItems.size()-1)
        return EMPTY_VIEW_HOLDER;
    else
        return ADD_VIEW_HOLDER;
}

@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

    switch (viewType){
        case ADD_VIEW_HOLDER:
            View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.li_main_content,parent,false);
            return new MainItemHolder(view);
        case EMPTY_VIEW_HOLDER:
            View EMPTYView= LayoutInflater.from(parent.getContext()).inflate(R.layout.li_EMPTY_action,parent,false);
            return  new EMPTYViewItemHolder(EMPTYView);
            default:
                 return null;
    }
}

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
    int size= mDrinkItems.size();
    switch (getItemViewType(position)){
        case ADD_VIEW_HOLDER:
            ((MainItemHolder)holder).bindData(mDrinkItems.get(position),position,size);
            break;
        case EMPTY_VIEW_HOLDER:
            ((EMPTYViewItemHolder)holder).bindData(mDrinkItems.get(position),position,size);
            break;
    }

}

@Override
public int getItemCount() {
    return mDrinkItems.size();
}

public void setData(List<DailyConsumption> mlist) {
    this.mDrinkItems = mlist;
    notifyDataSetChanged();
}

将数据添加到列表以设置适配器时,您将获得列表的最后一个索引以设置空 View 。

List<DataList> mList = new ArrayList<>();
mList.add(mList.size(),new DataList(// whatever you want to add));

关于android - 在 RecyclerView 中绘制空单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44538509/

相关文章:

Android HTTP PUT 请求可能与 Post 不同,因为它不起作用?

java - 自定义标记图标谷歌地图android

android - 在状态栏中的通知选项卡上方添加按钮

android - 无法从 Firestore 获取嵌套数据并将其显示在 Recyclerview 中

具有列和行跨度的 Android GridLayoutManager

android - 电池优化白名单不会阻止 Doze 延迟我的应用程序

android - 线性布局 onclicklistener 不适用于 recyclerview

android - Activity.recreate() 复制列表

android - GridLayoutManager 跨度大小 RecycleView