所以我有一个带有listview的活动,它通过游标动态更新。只需将查询命令重新分配给此变量即可重用游标对象,该变量将返回一组全新的数据。这很好用。问题是我已经扩展了SimpleCursorAdapter以使用AlphaIndexer。显然,当光标被更新或更改时,它应该清除索引缓存。这不会发生。所有这一切的主要原因是快速滚动处理传入的不同游标并使其工作。现在,在使用不同的游标时,列表视图使用第一个列表视图中的索引,尝试快速滚动第二个列表视图。
class AlphaCursor extends SimpleCursorAdapter implements SectionIndexer {
AlphabetIndexer alphaIndexer;
private int list_type;
public AlphaCursor(Context context, int layout, Cursor c, String[] from, int[] to, int type, String sortBy) {
super(context, layout, c, from, to);
// MUST have space in front of alphabet
int count = c.getCount();
// this.onContentChanged();doesnt do a thing
alphaIndexer = new AlphabetIndexer(c, c.getColumnIndex(sortBy), " ABCDEFGHIJKLMNOPQRSTUVWXYZ");
list_type = type;
知道可能会发生什么或如何清除此缓存?我尝试了onChanged()以及onContentChanged()。有没有人看过这个或知道任何建议?
代码的使用方式如下:
alpha = new AlphaCursor(ClassActivity.this, R.layout.list_item, m_cursor, from, to, TAB_HOME, "name");
alpha.changeCursor(m_cursor);
mList.setAdapter(alpha);
请记住,我有4个'标签',只需重新查询光标并创建一个新的AlphaIndexer。每次单击选项卡时,都会删除alpha变量。它似乎与索引器有关联。
由于
答案 0 :(得分:1)
由于AlphaIndexer在首次使用时似乎与ScrollView绑定,因此当在适配器中设置新的时,它会忽略任何后续更改。
为了解决问题中描述的问题,我使AlphaIndexer成为ListFragment的成员并创建了一次。在对适配器中使用的游标的后续更改中,我刚刚调用了alphaIndexer.setCursor(aCursor)。这修复了“陈旧”的问题。索引问题以及“偏移”#39;尝试将setFastScrollEnabled()与false / true一起使用时的字母。
我认为这也适用于ListActivity。
答案 1 :(得分:0)
尝试拨打alphaIndexer.setCursor(cursor);
之后
alphaIndexer = new AlphabetIndexer(c, c.getColumnIndex(sortBy), " ABCDEFGHIJKLMNOPQRSTUVWXYZ");
方法setCursor将新光标设置为数据集,并重置索引缓存。
答案 2 :(得分:0)
您永远不必从ListView下更改适配器。看看调用swapCursor()而不是changeCursor()会发生什么。