ListView与AlphaIndexer缓存不清除

时间:2011-07-13 23:25:36

标签: android listview fastscroll

所以我有一个带有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变量。它似乎与索引器有关联。

由于

3 个答案:

答案 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()会发生什么。