gpt4 book ai didi

Android:StickyGridHeaders:setSelection 到一个项目

转载 作者:行者123 更新时间:2023-11-30 03:07:08 25 4
gpt4 key购买 nike

我正在为 GridView 使用 StickyGridHeader 库。我想根据应在 View 中显示的项目将 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:Item前的Headers个数: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 用空 View 填充每一行,包括标题,以将它们填充到 numOfColumns。这意味着如果您有一个包含 5 列的网格,则每个标题将包含 5 个 View ,每个空白区域也算作一个 View 。我最终不得不计算行数直到我想要显示的项目并执行此操作:

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

关于Android:StickyGridHeaders:setSelection 到一个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21614647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com