如何在Android中的ListView上隐藏过滤器弹出窗口?

时间:2012-04-03 13:58:30

标签: android listview android-listview popup

setTextFilterEnabled用于文本过滤ListView。过滤工作正常,但在键入时会出现一个显示过滤器文本的弹出窗口。见图:

ListView filter text popup

如何隐藏此弹出窗口或更改其在屏幕上的位置?

4 个答案:

答案 0 :(得分:4)

我在这个博客上找到了对我有用的更简单的解决方案:

http://blog.jamesbaca.net/?p=128

当您创建ArrayAdapter以填充ListView时,只需存储对其过滤器的引用,然后您只需修改ArrayAdapter上的过滤器而不是ListView

*在Xamarin中,您可以使用arrayAdapter.InvokeFilter("my text");

答案 1 :(得分:3)

创建过滤器,(您可能正在使用其他适配器)

ContentAdapter  adapter = new ContentAdapter(this, android.R.layout.simple_list_item_1,
            s);
    list1.setAdapter(adapter);
    Filter f = adapter.getFilter();

然后在'onQueryTextChange'中使用过滤器,而不是注释代码

public boolean onQueryTextChange(String newText) {
        if (TextUtils.isEmpty(newText)) {

            //list1.clearTextFilter();
            f.filter(null);
        } else {
            //list1.setFilterText(newText.toString());
            f.filter(newText);

        }
        return true;
    }

答案 2 :(得分:1)

Filter.publishResults(CharSequence约束,Filter.FilterResults结果)可能是弹出的。因此,您可能需要子类化Filter并覆盖它。

最好的问候。

答案 3 :(得分:0)

正如Vatsal所说,你可以从适配器创建一个过滤器。所以我解决这个问题的方法是我创建了一个ArrayAdapter作为类变量。

// ...
private void setListAdapter() {
    List<Word> words = Dictionary.getInstance(this).getWords();

    arrayAdapter = new ArrayAdapter<>(
            this,
            android.R.layout.simple_list_item_activated_1,
            android.R.id.text1,
            words);
    // Sets the List Adapter that we are using
    this.setListAdapter(arrayAdapter);
}
// ...

然后从onQueryTextChange或onQueryTextSubmit中的这个类变量中你可以得到像这样的过滤器

//...
public boolean onQueryTextChange(String query) {
    // By doing this it removes the popup completely which was arising from using the this.getListView().setFilterText(query) method
    arrayAdapter.getFilter().filter(query);

    return true;
}
//...