小编Nic*_*son的帖子

RecyclerView - 跳过第一个布局传递的屏幕外项目

我的一个适配器出了问题.我有一系列图像,我在网格中显示如下:

在此输入图像描述

当我有一个单一屏幕的物品并且它们都显示正常时,这很有效.当有更多项目向下滚动时,会出现问题.最初当我向下滚动时,项目显示为空白,GridLayout容器在那里,显示图像的代码运行,但它们不会出现在屏幕上,如下所示:

问题

如果我向上滚动,然后再次向下滚动,图像会显示在它们应该的位置:

在此输入图像描述

看起来我需要刷新布局或告诉渲染器某些东西已经发生变化,但我尝试的任何东西似乎都没有做任何事情.我试过打电话requestLayout,invalidate但它似乎没有解决问题.我还注册了一个GlobalOnLayoutListener,但这并没有更好.

这是相关代码:

这是我的onBindViewHolder方法

final GridLayout grid = ((KKAlbumViewHolder) holder).mGridLayout;
grid.removeAllViews();
int width = grid.getWidth();
if(width > 0) {
    albumHolder.setPreviewImages(posts);
}else {
    albumHolder.itemView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
                @Override
                public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
                    albumHolder.itemView.removeOnLayoutChangeListener(this);
                    albumHolder.setPreviewImages(posts);
                    albumHolder.mGridLayout.invalidate();
                }
    });
}
Run Code Online (Sandbox Code Playgroud)

这是我用来布局图像的方法.它基本上将图像放在不规则的网格中,因此如果有长图像或高图像,该图像将尝试占据整行或整列,具体取决于空闲空间.我设置参数宽度和高度的原因是毕加索不抱怨该.fit()方法:

public void setPreviewImages(ArrayList<KKPost> posts) {
        Picasso picasso = Picasso.with(itemView.getContext());

        int space = 0;
        int …
Run Code Online (Sandbox Code Playgroud)

android android-gridlayout gridlayoutmanager android-recyclerview

13
推荐指数
1
解决办法
1359
查看次数