为什么RecyclerView在第一项上方滚动得太多而在滚动时闪烁?

时间:2015-06-19 17:23:41

标签: android android-recyclerview recycler-adapter staggeredgridlayout

编辑:问题解决了!!

滚动时我的RecyclerView闪烁。单个屏幕有5-6个项目。 当我向下滚动时,屏幕闪烁,滚动条跳回RecyclerView的顶部。此后,如果我再次向上滚动,ReccyclerView会比第一项更加滚动。如果我非常快地重复上下滚动过程,则回收器视图完全向下滚动,只留下空白背景。之后如果我滚动任何方式都没有显示出来。此后,Scroller不再起作用。

我正在使用Lucasr Two Way View。 我正在讨论的问题也在Some weird with recyclerView.Adapter and UIL中提到但尚未解决。我的RecyclerView中有20多张图片,可以增加。每张图片的大小都超过100kb。

为了加载图片,我尝试Universal Image Loader(UIL)启用了缓存。但它没有帮助。UIL持续闪烁。 我也用GLIDE进行了测试,但问题仍然存在。

为了使这里更清晰,我的ADM快照。 <code>RecyclerView</code> Flickering During Scrolling Issue.

这是我的持有人类:

public class TileAdapter extends BaseTwoWayViewAdapter {

private static final String TAG = makeLogTag(TileAdapter.class);
private Context context;
private List<UserCategory> itemsList;

public TileAdapter(Context context, List<Tile> itemsList) {
    super(context, itemsList);
    this.context = context;
    this.itemsList = itemsList;
}

@Override
public TestHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.single_tile_full_length, null);
    TestHolder tileHolder = new TestHolder(v);
    return tileHolder;
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
    final Test tile = itemsList.get(position);
    final TestHolder tileHolder = (TestHolder) holder;
    final View itemView = tileHolder.itemView;
    tileHolder.bindHolder(tile);
}

/**
 * View Holder class
 */
public class TestHolder extends RecyclerView.ViewHolder {
    private TextView titleTextView;
    private ImageView imageView;
    private ImageLoader imageLoader;

    public TestHolder(View view) {
        super(view);
        this.titleTextView = (TextView) view.findViewById(R.id.titleTextView);
        this.imageView = (ImageView) view.findViewById(R.id.imageView);
        imageLoader = new ImageLoader(context);
    }

    void bindHolder(final Tile tile) {
        titleTextView.setText(tile.getName());

        if(imageView != null) {                
            ViewParent parent = imageView.getParent();
            int backgroundColor = context.getResources().getColor(R.color.backgroundColor);
            if (parent != null && parent instanceof View) {
                ((View) parent).setBackgroundColor(backgroundColor);
            } else {
                imageView.setBackgroundColor(backgroundColor);
            }

            imageLoader.loadImageUsingResId(tile.getImageResourcesId(), true, imageView);
        }
    }
}

}

以下是我如何设置适配器到RecyclerView:

TileAdapter tileAdapter = new TileAdapter(getActivity(), itemsList);
mRecyclerView.setAdapter(tileAdapter);

1 个答案:

答案 0 :(得分:0)

我的问题是通过将Lucasr双向视图文件的BaseLayoutManager文件替换为给定here

来解决的