RecycleView的滑动冲突问题,item间距问题,分页加载,快速回到顶部问题
来源:互联网 发布:it会议 编辑:程序博客网 时间:2024/05/22 04:48
- 需求分析
- RecycleView滑动冲突问题
- RecycleView混排模块实现整个页面布局的思路
- RecycleView快速回到顶部
- 添加item分割线或者间距的类
需求分析
一个页面的首页顶部是轮播图,下边有几个固定控件,最后是一个商品列表,可以分页加载,类似下图这种效果
现在整个页面除了标题栏就用一个RecycleView实现,不再用scrollView嵌套recycleview
1.RecycleView滑动冲突问题
只用RecycleView那就不存在滑动冲突问题,这就要用到RecycleView的两个方法,addHeaderView和addFootView,思路
2.RecycleView混排模块实现整个页面布局的思路
1.将上图中的方框中的模块布局从页面跟布局中抽离出来,单独写成xml文件,
2,页面的根布局只保留RecycleView和标题栏
实现越界回弹的那个上篇文章已经说过了
3,使用RecycleView的addHeaderView将抽离出来的布局加到recycleview整体布局上边,修改定位控件的操作
view= LayoutInflater.from(this).inflate(R.layout.shopmall_topview,null); view_foot= LayoutInflater.from(this).inflate(R.layout.footview,null); tv_loadingmore= (TextView) view_foot.findViewById(R.id.tv_loadingmore); ll_duihuan= (LinearLayout) view.findViewById(R.id.ll_duihuan); ll_zhekou= (LinearLayout) view.findViewById(R.id.ll_zhekou); ll_freeduihuan= (LinearLayout) view.findViewById(R.id.ll_freeduihuan); ll_signgift= (LinearLayout) view.findViewById(R.id.ll_signgift); ll_lotto= (LinearLayout) view.findViewById(R.id.ll_lotto); ll_share= (LinearLayout) view.findViewById(R.id.ll_share); ll_register= (LinearLayout) view.findViewById(R.id.ll_register);
RecycleView的滑动监听和item点击事件处理分页加载
recycleview.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); LinearLayoutManager manager = (LinearLayoutManager) recyclerView.getLayoutManager(); int firstVisibleItemPosition = manager.findFirstVisibleItemPosition(); // 当不滚动时 if (newState == RecyclerView.SCROLL_STATE_IDLE) { // 判断是否滚动超过一屏 if (firstVisibleItemPosition == 0) { IB_top.setVisibility(View.GONE); } else { IB_top.setVisibility(View.VISIBLE); page ++; if (page<=totalPageCount){ show_ZhuanQuMessage(0,0,page); } } } else if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {//拖动中 IB_top.setVisibility(View.GONE); } } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); } }); recycleview.addOnItemTouchListener(new OnItemChildClickListener() { @Override public void onSimpleItemChildClick(BaseQuickAdapter adapter, View view, int position) { } @Override public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) { super.onItemChildClick(adapter, view, position); int itemViewId = view.getId(); mapItem=list_hot.get(position); imageViewLove= (ImageView) view.findViewById(R.id.iv_love); switch (itemViewId) { case R.id.iv_shopImgitem: ///site/detail?IntegralmallrelationId=678&productid=37861// String imgURL= (String) mapItem.get("SrcAbsolute"); DecimalFormat df=new DecimalFormat("#####0");//四舍五入取整IntegralmallrelationId Double i= (Double) mapItem.get("IntegralmallrelationId"); Double j= (Double) mapItem.get("ProductID");
RecycleView快速回到顶部
recycleview.smoothScrollToPosition(0);
添加item分割线或者间距的类
package com.lab.web.entity;import android.graphics.Rect;import android.support.v7.widget.RecyclerView;import android.view.View;/** * 设置RecycleView的item间距的类 * Created by ytf on 2017/10/24. */public class SpacesItemDecoration extends RecyclerView.ItemDecoration { private int spanCount; private int spacing; private boolean includeEdge; public SpacesItemDecoration(int spanCount, int spacing, boolean includeEdge) { this.spanCount = spanCount; this.spacing = spacing; this.includeEdge = includeEdge; } @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { int position = parent.getChildAdapterPosition(view); // item position int column = position % spanCount; // item column if (includeEdge) { outRect.left = spacing - column * spacing / spanCount; // spacing - column * ((1f / spanCount) * spacing) outRect.right = (column + 1) * spacing / spanCount; // (column + 1) * ((1f / spanCount) * spacing) if (position < spanCount) { // top edge outRect.top = spacing; } outRect.bottom = spacing; // item bottom } else { outRect.left = column * spacing / spanCount; // column * ((1f / spanCount) * spacing) outRect.right = spacing - (column + 1) * spacing / spanCount; // spacing - (column + 1) * ((1f / spanCount) * spacing) if (position >= spanCount) { outRect.top = spacing; // item top } } }}
GridView样式使用:
recycleview.addItemDecoration(new SpacesItemDecoration(1, 15, true));
//跨度,四周间距25px,包含边距
listview样式的类:
public class SpacesItemDecoration extends RecyclerView.ItemDecoration { private int space; public SpacesItemDecoration(int space) { this.space=space; } @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { outRect.left=space; outRect.right=space; outRect.bottom=space; if(parent.getChildAdapterPosition(view)==0){ outRect.top=space; } }}
linerlayoutmanger使用:
SpacesItemDecoration decoration=new SpacesItemDecoration(16);recyclerView.addItemDecoration(decoration);
阅读全文
0 0
- RecycleView的滑动冲突问题,item间距问题,分页加载,快速回到顶部问题
- 解决RecycleView嵌套RecycleView滑动冲突问题
- 解决Scrollview嵌套recycleview的显示不完全,滑动冲突问题
- scrollview嵌套recycleview滑动冲突的问题之2
- RecycleView删除item问题
- 关于点击状态栏回到顶部的问题
- androidListView分页加载总是回到头部的问题
- 关于recycleview的item的布局问题
- RecycleView 删除Item 遇到的问题
- RecycleView 最后一条Item 宽度的问题
- 处理 recycleview 和 手势冲突的问题
- scrollview嵌套recycleview冲突的问题3
- 仿Launch的 分页滑动,解决上下左右冲突问题
- Recyclerview列表,item嵌套横向Gridview 解决滑动冲突,数据加载问题
- 解决scrollview嵌套recycleview,recycleview抢走滑动事件的问题
- 解决RecycleView嵌套RecycleView滑动卡顿的问题
- View的滑动冲突问题
- HorizontalScrollView滑动冲突的问题
- banner 还有很多 进来看看
- 常用正则表达式65例
- 在IDEA中使用MyBatis Generator逆向工程生成代码
- 03-树1 树的同构
- 在linux下安装Redis
- RecycleView的滑动冲突问题,item间距问题,分页加载,快速回到顶部问题
- ionic3学习2(API)
- spring boot 跨域
- 创建数组NSArray与NSMutableArray(Objective-C 开发范例)
- Hacker News与Reddit的算法比较
- Handler(图片)
- AB1601低功耗时烧写代码注意事项
- servlet
- 1693 水群(最短路)