iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >android瀑布流,完美解决滑动过程中item位置错乱,下拉刷新顶部空白,加载更多顶部错乱等问题
  • 233
分享到

android瀑布流,完美解决滑动过程中item位置错乱,下拉刷新顶部空白,加载更多顶部错乱等问题

Android 2022-06-06 13:06:13 233人浏览 泡泡鱼
摘要

StaggerdRecyclerView Android瀑布流,完美解决滑动过程中item位置错乱,下拉刷新顶部空白,加载更多顶部错乱等问题,还

StaggerdRecyclerView

Android瀑布流,完美解决滑动过程中item位置错乱,下拉刷新顶部空白,加载更多顶部错乱等问题,还可以实现动画效果

效果图

在这里插入图片描述

集成
allprojects {
		repositories {
			...
			Maven { url 'https://jitpack.io' }
		}
	}
dependencies {
	        implementation 'com.GitHub.moo611:StaggerdRecyclerView:latestversion'
	}
基本用法 1.布局文件里添加

2.您的model,需要实现StaggedModel接口
//示例 example
public class FakeModel implements StaggedModel {
    private int width;
    private int height;
    private int resourceId;
    public FakeModel(int width, int height, int resourceId){
        this.width = width;
        this.height = height;
        this.resourceId = resourceId;
    }
    @Override
    public int getWidth() {
        return width;
    }
    @Override
    public int getHeight() {
        return height;
    }
    @Override
    public String getTitle() {
        return null;
    }
    @Override
    public String getThumb() {
        return null;
    }
    @Override
    public int localResorce() {
        return resourceId;
    }
}
3.您的adapter,需要继承staggedadapter
  class MyAdapter extends StaggedAdapter {
        MyAdapter(Context c) {
            super(c);
        }
        @Override
        public RecyclerView.ViewHolder addViewHolder(ViewGroup viewGroup, int i) {
            //绑定自定义的viewholder
            View v = LayoutInflater.from(MainActivity.this).inflate(R.layout.custom_item_layout,viewGroup,false);
            return new MyHolder(v);
        }
        @Override
        public void bindView(RecyclerView.ViewHolder viewHolder, int i) {
            MyHolder myHolder = (MyHolder)viewHolder;
            // 在加载图片之前设定好图片的宽高,防止出现item错乱及闪烁
            ViewGroup.LayoutParams layoutParams = myHolder.img.getLayoutParams();
            layoutParams.height = datas.get(i).getHeight();
            myHolder.img.setLayoutParams(layoutParams);
            myHolder.img.setImageResource(datas.get(i).localResorce());
        }
    }
4.您的viewholder,和recyclerview时的写法一样。
class MyHolder extends RecyclerView.ViewHolder{
        ImageView img;
        public MyHolder(@NonNull View itemView) {
            super(itemView);
            img = itemView.findViewById(R.id.img);
        }
    }
5.mainactivity
MyAdapter staggedAdapter;
StaggerdRecyclerView str;
private List datas = new ArrayList();
...
        str = findViewById(R.id.str);
        staggedAdapter = new MyAdapter(this);
        str.link(staggedAdapter,2);
        str.addCallbackListener(new LoadMoreAndRefresh() {
            @Override
            public void onLoadMore() {
                staggedAdapter.refresh(datas);//加载更多
            }
            @Override
            public void onRefresh() {
                staggedAdapter.loadMore(datas);//下拉刷新
            }
        });
        refresh();
...
其他功能 动画效果
str.addAnimation(R.anim.right_to_left);
设置间距
str.aDDDecoration(new GridItemDecoration(this,10));
禁止刷新
str.enableRefresh(false);
禁止加载更多
str.enableLoadMore(false);
原理 滑动时位置错乱

在Recyclerview滑动过程中,由于缓存复用机制,会对Item进行重绘, 如果不确定imageview的宽高,就会造成位置错乱和闪烁。

刷新时顶部留白

使用 notifyDataSetChanged()方法做刷新时,会触发StaggeredGridLayoutManager 的onItemsChanged 方法,导致item的spanIndex重现进行计算,item所在列的位置出现了变化,导致了顶部空白。而用notifyItemRangeInserted,notifyItemRangeChanged做局部刷新时则不会引起变化。

参考

Https://www.jianshu.com/p/d34075c0f287


作者:德松欧巴


--结束END--

本文标题: android瀑布流,完美解决滑动过程中item位置错乱,下拉刷新顶部空白,加载更多顶部错乱等问题

本文链接: https://www.lsjlt.com/news/29329.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作