3

我在我的项目中使用StaggeredGridView,当滚动到底部时,我将数据添加到交错网格视图中,但是网格视图已经回到顶部。我不希望它回到顶部。

下面是StaggeredGridView中的onChanged方法,怎么修改呢?

请帮我解决这个问题,非常感谢!

private class AdapterDataSetObserver extends DataSetObserver {

    private Parcelable mInstanceState = null;

    @Override
    public void onChanged() {
        mDataChanged = true;
        mItemCount = mAdapter.getCount();

     // TODO: Consider matching these back up if we have stable IDs.
        mRecycler.clearTransientViews();

        if (mHasStableIds) {
            // Clear all layout records and recycle the views
            mLayoutRecords.clear();
            recycleAllViews();

            // Reset item bottoms to be equal to item tops
            final int colCount = mColCount;
            for (int i = 0; i < colCount; i++) {
                mItemBottoms[i] = mItemTops[i];
            }
        }

        // reset list if position does not exist or id for position has changed
        if(mFirstPosition > mItemCount-1 || mAdapter.getItemId(mFirstPosition) != mFirstAdapterId){
            mFirstPosition = 0;
            Arrays.fill(mItemTops, 0);
            Arrays.fill(mItemBottoms, 0);

            if(mRestoreOffsets!=null)
            Arrays.fill(mRestoreOffsets, 0);
        }

        // TODO: consider repopulating in a deferred runnable instead
        // (so that successive changes may still be batched)
        requestLayout();
    }

    @Override
    public void onInvalidated() {
    }
}

我找到了一种通过删除以下代码来解决此问题的方法:

// reset list if position does not exist or id for position has changed
    if(mFirstPosition > mItemCount-1 || mAdapter.getItemId(mFirstPosition) != mFirstAdapterId){
        mFirstPosition = 0;
        Arrays.fill(mItemTops, 0);
        Arrays.fill(mItemBottoms, 0);

        if(mRestoreOffsets!=null)
        Arrays.fill(mRestoreOffsets, 0);
    } 
4

0 回答 0