代码之家  ›  专栏  ›  技术社区  ›  sosiouxme

返回带有文本筛选器的ListView

  •  0
  • sosiouxme  · 技术社区  · 15 年前

    我以预期的方式对列表视图启用了文本筛选;添加 android:textFilterEnabled=”true” 在资源定义和(因为我使用的是SimpleCursorAdapter)中设置一个FilterQueryProvider,它提供一个过滤的光标,如下所示:

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

    我的问题是:一旦用户选择了一个列表项,转到另一个活动,并返回到此活动,我如何控制以前应用的筛选器的状态?

    我现在看到的是,当我返回到活动时,使用的光标是在创建时设置在筛选器上的未筛选光标,但它们键入的筛选器文本仍然显示(键入键将应用筛选器)。

    我想做的是清除过滤器,或者保留活动留下的已过滤光标。

    1 回复  |  直到 15 年前
        1
  •  3
  •   Janusz Daniel Rindt    15 年前

    我自己也有同样的问题,尽管我没有设置 FilterQueryProvider SimpleCursorAdapter 我用了一个超高的 runQueryOnBackgroundThread(CharSequence constraint) 方法在实例化 SimpleCursorAdapter公司 .
    例如。

    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() 方法。如果你的活动范围扩大 ListActivity 您可以使用以下选项:

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

    将上述行添加到在列表中重新加载数据的方法中,即 列表活动 如图所示。

    或者,如果要保持过滤器的活动状态并将其重新应用于 列表活动 当用户返回时。您可以从 列表活动 作为一个 CharSequence 把它传给 SimpleCursorAdapter公司 的电流 Filter :

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

    再次将上述行添加到方法中,在其中重新加载列表中的数据,并重新应用现有的筛选器。