我正在使用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 ) );