我正在使用StickyGridHeader库进行gridview。我想根据它应该在视图中显示的项目将gridview滚动到特定位置。

我已经尝试过将setSelection用作我希望使用的gridview中该项目的索引,但是它倾向于过高或过低我在具有不同列数的网格中期望的位置。

我可以使用setSelection在具有一列(基本上是列表)的网格中设置正确的位置,并以此方式查找项目:

    event = getEventThatWeWantByDate();
    //Find and store event's position in the gridview
    for( int i = 0; i < getGridView().getAdapter().getCount(); i++ ) {
        gridEvent = (Event) getGridView().getItemAtPosition( i );
        if( !( gridEvent instanceof Event ) )
            continue;
        if( gridEvent.getEventDate() == event.getEventDate() ) {
            index = i;
            break;
        }
    }


然后,我使用索引来启动它。我还有另一个功能可以计算网格中的空白数量:

    int blanks = 0;
    int sumOfAllLastRowItems = 0;
    //Get the number of blanks in the grid up until the desired item
    for( int i = 0; i < headers; i++ ) {
        int numOfItemsInLastRow = wrapper.getCountForHeader( i ) % getResources().getInteger( R.integer.event_grid_num_columns );
        //Log.e( TAG, "Num in area: " + numOfItemsInLastRow );
        if( numOfItemsInLastRow != 0 ) {
            sumOfAllLastRowItems += numOfItemsInLastRow;
            int numOfBlankSpaces = ( getResources().getInteger( R.integer.event_grid_num_columns ) ) - numOfItemsInLastRow;
        //  Log.e( TAG, "Adding num of blanks: " + numOfBlankSpaces );
            blanks += numOfBlankSpaces;
        }
        else sumOfAllLastRowItems += getResources().getInteger( R.integer.event_grid_num_columns );
    }


以及我想要的项目之前的标题数量:

    StickyGridHeadersSimpleAdapterWrapper wrapper = new StickyGridHeadersSimpleAdapterWrapper( (StickyEventViewGridAdapter) getAdapter() );
    int headers = 0;
    //Count number of headers before the requested event
    for( int i = 0, j = 0; i < wrapper.getNumHeaders() ; i++ ) {
        j += wrapper.getCountForHeader( i );
        headers++;
        if( j >= arrayIndex ) {
            break;
        }
    }


我尝试将空白和标头的数量添加到索引中,如果有两列,则效果很好,但是如果我使网格使用3列,它将再次进入不相关的位置。

有什么建议么?

02-06 16:31:03.147 8711-8711 /? E / EventGridFragment:项目前的标题数:24

02-06 16:31:03.147 8711-8711 /? E / EventGridFragment:粘性网格适配器索引:71

02-06 16:31:03.147 8711-8711 /? E / EventGridFragment:数组适配器索引:45

02-06 16:31:03.147 8711-8711 /? E / EventGridFragment:空白:28

02-06 16:31:03.147 8711-8711 /? E / EventGridFragment:返回值:123

当我的列数为3时,我实际上正在gridview中寻找〜150的项目。

最佳答案

StickyGridHeader会在每行(包括标题)中填充空白视图,以将其填充到numOfColumns。这意味着,如果您有一个包含5列的网格,则每个标题将包含5个视图,并且每个空白都计为一个视图。我最终不得不计算行数,直到要显示的项目为止,然后执行以下操作:

getGridView.setSelection( ( numOfHeaders + numOfRows ) * getResources().getInteger( R.integer.event_grid_num_columns ) );

09-26 12:51