【问题标题】:AlphabetIndexer setCursor doesn't update its cacheAlphabetIndexer setCursor 不更新其缓存
【发布时间】:2011-07-15 17:51:20
【问题描述】:

我正在尝试使用 AlphabetIndexer 实现快速滚动,但是当光标发生变化时,它不会刷新索引缓存。在我的 CursorAdapter 构造函数中,我调用 setCursor(cursor) 但没有任何变化,根据文档:

您的适配器负责通过调用更新光标 setCursor(Cursor) 如果光标改变。 getPositionForSection(int) 方法对给定的起始索引进行二进制搜索 部分(字母)。

但是什么都没有发生。我将它用于搜索过滤器,所以当我搜索联系人时,它会使用联系人更新列表,因此 AlphabetIndexer 应该可以更新列表中新项目的索引。

示例:我的整个列表以“A”开头的联系人开头,以“E”开头的联系人结尾。因此 AlphabetIndexer 将在其缓存中拥有该索引。

但是,让我们尝试使用“C”搜索联系人,假设我有 250 个以“C”开头的联系人。因此,我必须快速滚动浏览此联系人,并且必须显示“C”索引,但它不仅显示“C”,还显示所有索引,这些索引在我拥有整个列表时显示。

这是我的 CursorAdapter 构造函数,我在其中为我键入的每个字母调用 setCursor(cursor):

public MyCursorAdapter(Context context, Cursor cursor, ArrayList<Integer> ids) 
        {
            super(context, cursor);
            try
            {
                mAlphaIndexer = new AlphabetIndexer(cursor, cursor.getColumnIndexOrThrow("Name")," ABCDEFGHIJKLMNOPQRSTUVWXYZ");
                notifyDataSetChanged(); 
                mAlphaIndexer.setCursor(cursor);        
                this.mSelectedContacts = ids;               
                Log.e("MyCursorAdapter", "construtor: ");
            }
            catch(Exception ex)
            {
                Log.e("MyCursorAdapter", "Error: " + ex);
            }
            finally
            {
                mAlphaIndexer.setCursor(cursor);
            }
        }

【问题讨论】:

标签: android android-listview android-cursor


【解决方案1】:

我在设置适配器后按顺序调用它解决了这个问题:

listView.setFastScrollEnabled(false);
listView.setFastScrollEnabled(true);

这对我有用。

【讨论】:

    【解决方案2】:

    调用setContentView(R.layout.whatever)然后用你的新适配器/新数据项重新填充ListView。这将使用您的新项目重绘 ListView,并且 FastScroll Overlay 将出现在正确的位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-08
      • 2018-06-09
      • 2014-02-17
      相关资源
      最近更新 更多