gpt4 book ai didi

android - 重新索引/刷新 SectionIndexer

转载 作者:可可西里 更新时间:2023-11-01 18:47:58 26 4
gpt4 key购买 nike

在将新项目添加到 ListView 后,有什么方法可以重新索引 SectionIndexer 吗?

我找到了这个 solution , 但刷新SectionIndexer后叠加层位于左上角。

有人有什么想法吗?

最佳答案

一旦 FastScroller(它在 ListView 扩展的 AbsListView 类中)通过调用 SectionIndexer#getSections() 获取您的部分,除非您像您提到的链接中提到的那样启用/禁用快速滚动,否则它永远不会重新获取它们。为了获取要在屏幕上显示的值,FastScroller 调用该部分的 toString 方法。

一个可能的解决方案是使用具有以下特征的自定义 SectionIndexer:

  • sections 数组是固定长度的(最大长度是预期的sections 数量。例如,如果sections 代表英文字母,它将是26)
  • 使用自定义对象来表示部分,而不是使用字符串
  • 覆盖自定义部分对象的 toString 方法,以根据当前“部分值”显示您想要的内容。
  • -

例如在您的自定义 SectionIndexer 中

private int mLastPosition;

public int getPositionForSection(int sectionIndex) {
if (sectionIndex < 0) sectionIndex = 0;
// myCurrentSectionLength is the number of sections you want to have after
// re-indexing the items in your ListView
// NOTE: myCurrentSectionLength must be less than getSections().length
if (sectionIndex >= myCurrentSectionLength) sectionIndex = myCurrentSectionLength - 1;
int position = 0;
// --- your logic to find the position goes in here
// --- e.g. see the AlphabeticIndexer source in Android repo for an example

mLastPosition = position;
return mLastPosition;
}

public Object[] getSections() {
// Assume you only have at most 3 section for this example
return new MySection[]{new MySection(), new MySection(), new MySection()};
}

// inner class within your CustomSectionIndexer
public class MySection {
MySection() {}

public String toString() {
// Get the value to displayed based on mLastPosition and the list item within that position
return "some value";
}
}

关于android - 重新索引/刷新 SectionIndexer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3898749/

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