1

所以我有一个带有列表视图的活动,它通过游标动态更新。只需将查询命令重新分配给该变量,即可重用游标对象,该变量返回一组全新的数据。这工作正常。问题是我已经扩展了 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 变量都会被清空。看起来索引器有视图cahcing。

谢谢

4

3 回答 3

1

由于 AlphaIndexer 在第一次使用时似乎与 ScrollView 绑定在一起,因此当在 Adapter 中设置新的更改时,它会忽略任何后续更改。

为了解决问题中描述的问题,我使 AlphaIndexer 成为 ListFragment 的成员并创建了一次。在适配器中使用的光标的后续更改中,我只调用了 alphaIndexer.setCursor(aCursor)。这解决了在尝试将 setFastScrollEnabled() 与 false/true 一起使用时的“陈旧”索引问题以及“偏移”字母表。

我假设这也适用于 ListActivity。

于 2012-03-11T12:14:36.403 回答
0

试着打电话alphaIndexer.setCursor(cursor);

在这之后

alphaIndexer = new AlphabetIndexer(c, c.getColumnIndex(sortBy), " ABCDEFGHIJKLMNOPQRSTUVWXYZ");

方法 setCursor 将新游标设置为数据集并重置索引缓存。

于 2011-07-15T13:34:15.040 回答
0

您永远不必从 ListView 下更改适配器。看看你调用 swapCursor() 而不是 changeCursor() 会发生什么。

于 2011-09-07T05:05:15.053 回答