2013-03-13 2 views
1

Я хочу обновить свой список, даже если адаптер null, но я не знаю, как это сделать.Обновить ListView, даже если его адаптер равен нулю

Когда я выполнить следующий код моего приложения аварии:

ProductAdapter adapter = new ProductAdapter(context, R.layout.listrow, yal); 
if(adapter.getCount()>0){ 
    lv.setAdapter(adapter); 
}else{ 
    lv.setAdapter(null); 
} 
adapter.notifyDataSetChanged(); 
lv.invalidateViews(); 
+0

ли lv.setAdapter (нуль); установить адаптер в нуль? Если да, то вторая ли последняя строка бросает исключение нулевого указателя? Можете ли вы показать нам файл журнала? – david99world

+1

Если адаптер пуст или пуст, у вас нет списка. так что же там обновить? – FWeigl

+0

я удаляю 1 элемент из списка, так что нет никого, кроме того, он должен показать пустой список, но мое приложение отключается –

ответ

1

Адаптер является своего рода источником данных для списка. Он предоставляет отдельные элементы списка. Вы не можете иметь список без адаптера, так как тогда у вас не будет строк в списке.

За дополнительной информацией обращайтесь к ListView documentation.

+0

thats the point Я хочу обновить свой список , но в списке есть еще 1 элемент, который не может быть там, поэтому я хочу для обновления mylist без перезагрузки активности –

+0

Здесь не вопрос. Вы спрашиваете, как обновить список с нулевым адаптером. Если вы хотите обновить список, укажите новый адаптер или измените элементы в текущем, а затем вызовите datasetChanged. ** Не устанавливайте ** адаптер в нуль. Это вызывает крах. – Shade

+0

проблема в том, что когда у моего адаптера нет элементов, у меня сбой приложения –

0

Не сворачивайте адаптер - списокView всегда нуждается в нем. Вместо этого смените нулевой набор , с которым работает адаптер, и убедитесь, что getCount() возвращает 0, если набор данных является нулевым (или пустым). Или не сворачивайте набор данных, но делайте его пустым списком или массивом.

Если ваши данные изменяются, обновите набор данных адаптеров и вызовите notifyDatasetChanged() на адаптере. Не создавайте новый адаптер для ListView при получении новых данных. Это важно по нескольким причинам; например позиция listViews не будет прыгать вверх, но останется там, где она есть.

Пример:

ProductAdapter adapter = new ProductAdapter(context, R.layout.listrow, null); 
listView.setAdapter(adapter); 

позже

adapter.setData(newData); 
adapter.notifyDatasetChanged(); 
Смежные вопросы