zhanghai / AndroidFastScroll

Fast scroll for Android RecyclerView and more
https://play.google.com/store/apps/details?id=me.zhanghai.android.fastscroll.sample
Apache License 2.0
701 stars 64 forks source link

FixItemDecorationRecyclerView crashes in runtime #18

Closed artsmvch closed 4 years ago

artsmvch commented 4 years ago

If you try to use FixItemDecorationRecyclerView this will definitely crash with ClassCastException in runtime. As you can see in the source code:

@Override
    protected void dispatchDraw(@NonNull Canvas canvas) {
        for (int i = 0, count = getItemDecorationCount(); i < count; ++i) {
            FixItemDecoration decor = (FixItemDecoration) getItemDecorationAt(i);
            decor.getItemDecoration().onDraw(canvas, this, decor.getState());
        }
        super.dispatchDraw(canvas);
        for (int i = 0, count = getItemDecorationCount(); i < count; ++i) {
            FixItemDecoration decor = (FixItemDecoration) getItemDecorationAt(i);
            decor.getItemDecoration().onDrawOver(canvas, this, decor.getState());
        }
    }

    @Override
    public void addItemDecoration(@NonNull ItemDecoration decor, int index) {
        super.addItemDecoration(new FixItemDecoration(decor), index);
    }

    @NonNull
    @Override
    public ItemDecoration getItemDecorationAt(int index) {
        return ((FixItemDecoration) super.getItemDecorationAt(index)).getItemDecoration();
    }

You wrap ItemDecorations into FixItemDecoration (see addItemDecoration method) and then you cast it in such a way FixItemDecoration decor = (FixItemDecoration) getItemDecorationAt(i); (see dispatchDraw method)

Please fix this.

zhanghai commented 4 years ago

Fixed in 173ea1c.