如何在过滤后查明ListView的ArrayAdapter是否为空

时间:2015-09-18 06:20:44

标签: java android

有没有办法检查过滤后的列表视图是否为空?

我想要一个TextView说没有找到结果,如果它是空的?

我有一个15个项目的列表,我想基于搜索过滤,并且让我们说过滤器后我留下5,我想返回5.如果结果为空则返回0.每次我调用adapter.getCount(),即使在过滤后也总是返回15

编辑:这是我为测试而尝试的代码,但它总是进入Else Statement。

代码示例:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_search_results);

    Intent intent = getIntent();
    String searchPhrase = intent.getExtras().getString("search");
    Log.i(TAG, "Search phrase is" + searchPhrase);
    mListView = (ListView) findViewById(R.id.searchResultsListView);

    String[] listOfText = {"Row 1", "Row 2", "Row 3", "Row 4", "Row 5", "Row 6", "Row 7", "Row 8", "Row 9", "Row 10", "Row 11", "Row 12", "Row 13", "Row 14", "Row 15"};

    ArrayList<String> rowList = new ArrayList<>();
    rowList.addAll(Arrays.asList(listOfText));

    mArrayAdapter = new ArrayAdapter<>(this, R.layout.search_results_row_list, rowList);

    String searchQuery = searchPhrase.trim();
    if (searchQuery.length() > 0) {
        mArrayAdapter.getFilter().filter(searchPhrase);
        mArrayAdapter.notifyDataSetChanged();

        if (mArrayAdapter.getCount() == 0){
            Toast.makeText(this, "Empty", Toast.LENGTH_SHORT).show();

        } else {
            Toast.makeText(this, "!Empty", Toast.LENGTH_SHORT).show();

        }
    }
    mListView.setAdapter(mArrayAdapter);


}

由于

5 个答案:

答案 0 :(得分:5)

你确定这一行:

mArrayAdapter.notifyDataSetChanged();
在UI线程上调用了

?如果没有,您的适配器将不知道数据更改。

<强>更新

我建议使用FilterListener,这是一个例子:

mArrayAdapter.getFilter().filter(searchQuery, new Filter.FilterListener() {
    @Override
    public void onFilterComplete(int count) {
        if (count == 0){
            Toast.makeText(MainActivity.this, "0 item", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(MainActivity.this, String.format("Items: %d", count), Toast.LENGTH_SHORT).show();
        }
    }
});

答案 1 :(得分:2)

可以使用列表适配器

if(adapter.getCount()==0)
    textView.setText("No Results Found");
    else
    textView.setText("");

答案 2 :(得分:1)

ArrayAdapter处理与数据相关的任务。最好在过滤后检查列表的大小,然后相应地使文本视图消息可见/不可见

答案 3 :(得分:1)

检测空适配器

使用CanvasControl跟踪适配器,如果适配器为空,它将返回0。

例如,

getCount()


显示消息

使用方法setEmptyView设置视图以显示适配器是否为空。

例如,

if(adapter.getCount()==0)
    // result is empty

答案 4 :(得分:1)

尝试使用FilterListener接口http://developer.android.com/reference/android/widget/Filter.FilterListener.html

    mArrayAdapter.getFilter().filter(searchPhrase, new Filter.FilterListener() {
    public void onFilterComplete(int count) {
        if (count == 0){
            Toast.makeText(this, "Empty", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(this, "!Empty", Toast.LENGTH_SHORT).show();
        }
    }
});