Начиная с версий Android M и N, следующее работает для меня и будет правильным подходом. Очистка ListView или установка Adapter в значение null не является правильным подходом и может привести к проблеме с нулевым указателем, неверному ListView и / или падению приложения.
Просто сделайте:
mList.clear();
mAdapter.notifyDataSetChanged();
т.е. сначала вы полностью очистите список, а затем сообщите адаптеру об этом изменении. Android позаботится о корректном обновлении интерфейса с пустым списком. В моем случае мой список - ArrayList.
Если вы выполняете эту операцию из другого потока, запустите этот код в потоке пользовательского интерфейса:
runOnUiThread(mRunnable);
Где mRunnable будет:
Runnable mRunnable = new Runnable() {
public void run() {
mList.clear();
mAdapter.notifyDataSetChanged();
}
};;