etsy / AndroidStaggeredGrid

An Android staggered grid view which supports multiple columns with rows of varying sizes.
https://github.com/etsy/AndroidStaggeredGrid
4.76k stars 1.13k forks source link

Incorrect behavior when using two adapters with different items layouts. #141

Open shushper opened 9 years ago

shushper commented 9 years ago

If you first set one adapter to grid with it's own items layout, after that set another adapter with different items layout, grid will use items layout from first adapter for some items. I temporarily solved this problem by adding clearState() to setAdapter() method.

@Override
public void setAdapter(final ListAdapter adapter) {

    clearState();

    if (mAdapter != null) {
        mAdapter.unregisterDataSetObserver(mObserver);
    }

    // use a wrapper list adapter if we have a header or footer
    if (mHeaderViewInfos.size() > 0 || mFooterViewInfos.size() > 0) {
        mAdapter = new HeaderViewListAdapter(mHeaderViewInfos, mFooterViewInfos, adapter);
    }
    else {
        mAdapter = adapter;
    }

    mDataChanged = true;
    mItemCount = mAdapter != null ? mAdapter.getCount() : 0;

    if (mAdapter != null) {
        mAdapter.registerDataSetObserver(mObserver);
        mRecycleBin.setViewTypeCount(mAdapter.getViewTypeCount());
    }

    requestLayout();
}