所以我有一个活动,其中有一个通过光标动态更新的列表视图。通过将查询命令简单地重新分配给该变量,就可以重用该游标对象,该变量将返回一组新的数据。这很好。问题是我扩展了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变量都会被清空。看来索引器正在处理视图。
谢谢
最佳答案
由于AlphaIndexer似乎在首次使用时便已绑定到ScrollView,因此当在Adapter中设置新的更改时,它将忽略随后的任何更改。
为了解决问题中所述的问题,我使AlphaIndexer成为ListFragment的成员并创建了一次。在对适配器中使用的游标进行后续更改时,我只调用了alphaIndexer.setCursor(aCursor)。这修复了尝试将setFastScrollEnabled()与false / true一起使用时的“陈旧”索引问题以及“偏移”字母。
我认为这也可以用于ListActivity。