【问题标题】:Returning to a ListView with a text filter使用文本过滤器返回 ListView
【发布时间】:2010-02-06 20:38:08
【问题描述】:

我以预期的方式在我的 ListView 上启用了文本过滤;在资源定义中添加android:textFilterEnabled=”true” 并(因为我使用的是 SimpleCursorAdapter)设置一个 FilterQueryProvider,它提供一个过滤后的游标,如下所示:

public Cursor runQuery(CharSequence constraint) {
    Cursor cur = mDba.fetchTrackers(mCurrentGroupId, constraint.toString());
    startManagingCursor(cur);
    return cur;
}

我的问题是:一旦用户选择了一个列表项,转到另一个活动,然后返回到这个活动,我如何控制之前应用的过滤器的状态?

我现在看到的是,当我返回活动时,正在使用的光标是创建时在过滤器上设置的未过滤的光标,但仍然显示他们键入的过滤器文本(并且键入键会导致过滤器应用)。

我想做的是要么清除过滤器,要么保留活动留下的过滤光标。

【问题讨论】:

    标签: android listview filter


    【解决方案1】:

    我自己也遇到了同样的问题,尽管在实例化 SimpleCursorAdapter 时,我没有在 SimpleCursorAdapter 中设置 FilterQueryProvider,而是使用了覆盖的 runQueryOnBackgroundThread(CharSequence constraint) 方法。
    例如。

    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.list, cursor, from, to) {  
    
       @Override  
       public Cursor runQueryOnBackgroundThread(CharSequence constraint){  
          Cursor cur = mDba.fetchTrackers(mCurrentGroupId, constraint.toString());
          startManagingCursor(cur);  
          return cur;  
       }  
    };
    

    但如果你想清除过滤器,你需要做的就是获取ListView并调用它的clearTextFilter()方法。因此,如果您的活动 extendsListActivity您可以使用以下内容:

    ListView lv = getListView();    
    lv.clearTextFilter();
    

    将上述行添加到重新加载列表中数据的方法中,即每当显示 yourListActivity 时。

    或者,如果您想保持过滤器处于活动状态并在用户返回时将其重新应用到ListActivity。您可以从ListActivity作为CharSequence获取已经输入的当前过滤器文本并将其传递给SimpleCursorAdapter的currentFilter:

    adapter.getFilter().filter(lv.getTextFilter());
    

    再次将上述行添加到重新加载列表中数据的方法中,它将重新应用现有过滤器。

    【讨论】:

      猜你喜欢
      • 2013-07-19
      • 1970-01-01
      • 2012-06-01
      • 2015-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多