我正在构建一个购物车RecyclerView,该购物车在RecyclerView中显示购物车中的所有物品,并且在底部具有一个汇总购物车的附加视图(总欠款,优惠券折扣(如适用)等)。
如果购物车中有> 3个项目,则看起来不错,因为用户必须滚动到底部才能查看“摘要视图”。但是,如果有1或2个项目,则出现第一个项目,而不是摘要视图,然后出现空白。我希望先输入项目,然后再输入空白,然后再选择摘要视图。
我尝试添加空项目,但是,根据设备的分辨率,它看起来不一致。
当前外观,如果少于3个项目(即,如果不需要滚动):
-----------
| Item1 |
| ------- |
| Item2 |
| ------- |
| Summary |
| ------- |
| |
| |
| |
| |
----------
所需外观:
-----------
| Item1 |
| ------- |
| Item2 |
| ------- |
| |
| |
| |
| |
| ------- |
| Summary |
----------
我在考虑您的任务,并最终整理了一些可能有用的代码。不过在这个阶段有一个问题。
我所做的是在回收者视图中添加了一个项目装饰器:
recyclerView.addItemDecoration(new StickySummaryDecoration());
这是我对基本装饰器的实现(坦率地说,这是我对项目装饰器的初次体验,因此它可能不是最佳的或完全正确的,但我已尽力了):
public class StickySummaryDecoration extends RecyclerView.ItemDecoration {
@Override
public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
int childCount = parent.getAdapter().getItemCount();
int lastVisibleItemPosition =
((LinearLayoutManager) parent.getLayoutManager()).findLastVisibleItemPosition();
int firstVisiblePosition =
((LinearLayoutManager) parent.getLayoutManager())
.findFirstCompletelyVisibleItemPosition();
if ((firstVisiblePosition == 0) && (lastVisibleItemPosition == (childCount - 1))) {
View summaryView = parent.getChildAt(parent.getChildCount() - 1);
int topOffset = parent.getHeight() - summaryView.getHeight();
int leftOffset =
((RecyclerView.LayoutParams) summaryView.getLayoutParams()).leftMargin;
c.save();
c.translate(leftOffset, topOffset);
summaryView.draw(c);
c.restore();
summaryView.setVisibility(View.GONE);
}
}
}
所以我得到了什么。
简短列表的底端摘要:
您需要向下滚动以查看长列表中的摘要:
现在介绍一个问题。在长列表中向上滚动时的副作用是我尚未解决的问题。
我的实验已上传到github仓库中,以防万一:)
编辑
刚刚,我来到回收站视图中缺少的行元素是回收的具有GONE
可见性的摘要视图持有人。应该有办法把它带回来...
编辑2
我重新考虑了我的第一个解决方案,并更改了一些代码以解决长列表的情况(在这种情况下,禁用了项装饰(我认为它更接近于您要实现的目标)),这将自动解决缺少行的问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句