yanyusong / Y_DividerItemDecoration

A common RecyclerView divider , supports the LinearLayoutManager and the GridLayoutManager.
https://juejin.im/post/5940a020a0bb9f006b734228
Apache License 2.0
378 stars 56 forks source link

如何判断是最后一条数据呢? #7

Closed magical-xu closed 6 years ago

magical-xu commented 6 years ago

建议在您的 Y_DividerItemDecoration#getDivider() 抽象方法中 加个 是否为最后一个Item的参数

因为有些需求是头尾的 divider 不显示的

zhaoziliang01 commented 6 years ago

同求

yanyusong commented 6 years ago

嗯,往recyclerview里填充数据时肯定是有一个数据源的吧,假如用 itemlist 这个变量保存了recyclerview 里填充的所有数据,

判断是否是 ## 最后一条 只需要在 getDivider()中用 itemPosition,

if (itemPosition == itemlist.size()-1){
   // 这是最后一条
   return divider = new Y_DividerBuilder().create();
}

判断是否是 ## 第一条

if (itemPosition == 0){
   // 这是第一条
   return divider = new Y_DividerBuilder().create();
}
zhaoziliang01 commented 6 years ago

呃。gridview 判断最后一行 麻烦了点。

yanyusong commented 6 years ago

gridview的话,可以用 条目总数 对 每行数目取余,用余数来做判断。 比如 :假如条目数据源为 itemlist,gridview 每行3个,

switch ( itemlist.size() % 3 ){
     case 0 : 
                    // 表示最后一行有三个item,则处理最后一行时对这倒数三个item做处理
                 if (itemPosition == itemlist.size()-1 || itemPosition == itemlist.size()-2 || itemPosition == itemlist.size()-3){
                    return divider = new Y_DividerBuilder().create();
                    }
                   break ;
     case 1 : 
                    // 表示最后一行有一个item,则处理最后一行时对这倒数一个item做处理
                 if ( itemPosition == itemlist.size()-1 ){
                    return divider = new Y_DividerBuilder().create();
                    }
                   break ;
     case 2 : 
                    // 表示最后一行有两个item,则处理最后一行时对这倒数两个item做处理
                 if ( itemPosition == itemlist.size()-1 || itemPosition == itemlist.size()-2  ){
                    return divider = new Y_DividerBuilder().create();
                    }
                   break ;
}

实现倒是可以实现,但确实有点小麻烦