有没有办法检查过滤后的列表视图是否为空?
我想要一个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);
}
由于
答案 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();
}
}
});