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

x10*_*ion 1 java android

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

我想TextView说没有结果,如果它是空的?

我有一个列表,说我想根据搜索过滤15项,并且让我们说过滤器后我留下5,我想返回5.如果结果为空则返回0.每次我调用适配器.getCount()它经过过滤后总是返回15

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

代码示例:

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);


}
Run Code Online (Sandbox Code Playgroud)

谢谢

Rya*_*anB 5

你确定这一行:

mArrayAdapter.notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)

被UI线程调用?如果没有,您的适配器将不知道数据更改.

UPDATE

我建议使用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();
        }
    }
});
Run Code Online (Sandbox Code Playgroud)