gpt4 book ai didi

java - Android:FastScrolling SectionIndexer getSections() 只被调用一次

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:09:17 24 4
gpt4 key购买 nike

我创建了一个使用 FastScrollListView。 (见图片)当用户单击以下任何按钮(即所有轨道、艺术家、专辑)时,每次调用以下自定义 ArrayAdater

ArrayAdapter<String> adapter = new ScrollIndexListAdapter(Listing.this, elements); 
//Code for ScrollIndexListAdapter is below

并更新相同的 ListView。

enter image description here

问题:根据我在 Android 中的调查,getSections() 方法仅被调用一次(即仅当 第一次 时间 ScrollIndexListAdapter被称为)。

这次填充了部分并且 fastScrolling 完美运行。

但是当我通过单击艺术家/专辑更新 ListView 时,不会调用 getSections() 方法。因此使用了较旧的部分,并且 FastScrolling 仍然显示旧字母表的预览。

那么,如何在每次更新 ListView 时更新部分?

有一个 setSections() 方法,但我找不到如何使用它。

ScrollIndexListAdapter 类的代码:

public class ScrollIndexListAdapter extends ArrayAdapter implements
SectionIndexer {

// Variables for SectionIndexer List Fast Scrolling
HashMap<String, Integer> alphaIndexer;
String[] sections;
private static ArrayList<String> list = new ArrayList<String>();

public ScrollIndexListAdapter(Context context, ArrayList<String> list) {
super(context, android.R.layout.simple_list_item_1, android.R.id.text1,
list);
this.list.clear();
this.list.addAll(list);
/*
* Setting SectionIndexer
*/
alphaIndexer = new HashMap<String, Integer>();
int size = list.size();
for (int x = 0; x < size; x++) {
String s = (String) list.get(x);
// Get the first character of the track
String ch = s.substring(0, 1);
// convert to uppercase otherwise lowercase a -z will be sorted
// after upper A-Z
ch = ch.toUpperCase();
if (!alphaIndexer.containsKey(ch)) {
alphaIndexer.put(ch, x);
}
}
Set<String> sectionLetters = alphaIndexer.keySet();
// create a list from the set to sort
ArrayList<String> sectionList = new ArrayList<String>(
sectionLetters);
Collections.sort(sectionList);
sections = new String[sectionList.size()];
sectionList.toArray(sections);
}

/*
* Methods for AphhabelIndexer for List Fast Scrolling
*/
@Override
public int getPositionForSection(int section) {
String letter = (String) sections[section];
return alphaIndexer.get(letter);
}

@Override
public int getSectionForPosition(int position) {
String letter = (String) sections[position];
return alphaIndexer.get(letter);
}

@Override
public Object[] getSections() {
return sections;
}
}

最佳答案

好像最新的FastScroll版本没有这个问题。但是,在你的情况下,有一个转机。将适配器设置为 ListView 时,禁用和启用快速滚动。请看下面的代码:

            adapter = new ScrollIndexListAdapter(this, data);
listView.setFastScrollEnabled(false);
listView.setAdapter(adapter);
listView.setFastScrollEnabled(true);

关于java - Android:FastScrolling SectionIndexer getSections() 只被调用一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11638551/

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