Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android AlphaIndexer缓存未清除的ListView_Android_Listview_Fastscroll - Fatal编程技术网

Android AlphaIndexer缓存未清除的ListView

Android AlphaIndexer缓存未清除的ListView,android,listview,fastscroll,Android,Listview,Fastscroll,因此,我有一个活动,其中包含一个通过游标动态更新的listview。只需将查询命令重新分配给该变量,即可重用游标对象,该变量将返回一组全新的数据。这个很好用。问题是,我已经扩展了SimpleCursorAdapter以使用字母索引器。显然,当光标被更新或更改时,它应该清除索引缓存。这并没有发生。所有这些的主要原因是让快速滚动在传入的不同游标上工作并使其工作。现在,在使用不同的游标时,listview使用来自第一个listview的索引,并尝试快速滚动第二个listview class Alpha

因此,我有一个活动,其中包含一个通过游标动态更新的listview。只需将查询命令重新分配给该变量,即可重用游标对象,该变量将返回一组全新的数据。这个很好用。问题是,我已经扩展了SimpleCursorAdapter以使用字母索引器。显然,当光标被更新或更改时,它应该清除索引缓存。这并没有发生。所有这些的主要原因是让快速滚动在传入的不同游标上工作并使其工作。现在,在使用不同的游标时,listview使用来自第一个listview的索引,并尝试快速滚动第二个listview

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个“选项卡”,它们只需重新查询光标并创建一个新的字母索引器。每次单击选项卡时,alpha变量都会被清空。看起来好像有视图正在与索引器交互


谢谢

尝试调用
alphaIndexer.setCursor(cursor)

此后

alphaIndexer=新的字母索引器(c,c.getColumnIndex(sortBy),“abcdefghijklmnopqrstuvxyz”)


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

尝试调用
alphaIndexer.setCursor(游标)

此后

alphaIndexer=新的字母索引器(c,c.getColumnIndex(sortBy),“abcdefghijklmnopqrstuvxyz”)


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

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

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

由于AlphaIndexer在首次使用时似乎与ScrollView绑定,因此在适配器中设置新的更改时,它会忽略任何后续更改

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


我假设这也适用于ListActivity。

由于AlphaIndexer在首次使用时似乎与ScrollView绑定,因此在适配器中设置新的时,它会忽略任何后续更改

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


我假设这也适用于ListActivity。

谢谢,但这也不起作用。这很奇怪,因为它还将游标传递到构造函数中。因为它是一个新对象,所以您可能会认为它也是一个新缓存。。。。这可不是什么烦人的事。我也遇到了同样的问题,我在设置适配器后依次调用listview.setFastScrollEnabled(false)和listview.setFastScrollEnabled(true)解决了这个问题。看起来这确实有效,但会弄乱fastscroll字母表的位置。现在,在屏幕中间出现的东西绝对位于左上角。不太确定什么可以解决这个问题,因为听起来它清除了视图缓存的一部分,但没有重建其中的一部分。在设置适配器后,是否立即将其设置为false和true?是的,确实如此。ListAdapter中有一些奇怪的缓存存储方法。每次在同一活动中,我都会更改光标并在同一ListView对象上设置新的listadapter。这和你正在做的相似吗?我想我必须在ListAdapter对象上创建并切换光标和正在设置的自定义到/从属性。谢谢,但这也不起作用。这很奇怪,因为它还将游标传递到构造函数中。因为它是一个新对象,所以您可能会认为它也是一个新缓存。。。。这可不是什么烦人的事。我也遇到了同样的问题,我在设置适配器后依次调用listview.setFastScrollEnabled(false)和listview.setFastScrollEnabled(true)解决了这个问题。看起来这确实有效,但会弄乱fastscroll字母表的位置。现在,在屏幕中间出现的东西绝对位于左上角。不太确定什么可以解决这个问题,因为听起来它清除了视图缓存的一部分,但没有重建其中的一部分。在设置适配器后,是否立即将其设置为false和true?是的,确实如此。ListAdapter中有一些奇怪的缓存存储方法。每次在同一活动中,我都会更改光标并在同一ListView对象上设置新的listadapter。这和你正在做的相似吗?我想我必须在ListAdapter对象上创建并切换光标和正在设置的自定义到/从属性。能否显示一段重用光标的代码?注意ClassActivity。这将传递activity引用。你应该使用getApplicationContext()。我同意。我做了这个改变,但运气不好。我开始觉得它的架构很糟糕,每个选项卡都必须有自己的光标。这会处理视图缓存,但会强制我有4个游标,而不是一个