В моем приложении, если вы нажмете на кнопку, я хочу удалить все элементы списка. Здесь я использую базовый адаптер для добавления элементов в представление списка.
Как я могу удалить элементы listview динамически.
В моем приложении, если вы нажмете на кнопку, я хочу удалить все элементы списка. Здесь я использую базовый адаптер для добавления элементов в представление списка.
Как я могу удалить элементы listview динамически.
Вызвать setListAdapter()
снова. На этот раз с пустым ArrayList.
ListView
работает на основе базовых данных в Adapter
. Чтобы очистить ListView
, вам нужно сделать две вещи:
notifyDataSetChanged
Например, см. скелет SampleAdapter
ниже, который расширяет BaseAdapter
public class SampleAdapter extends BaseAdapter {
ArrayList<String> data;
public SampleAdapter() {
this.data = new ArrayList<String>();
}
public int getCount() {
return data.size();
}
public Object getItem(int position) {
return data.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
// your View
return null;
}
}
Здесь у вас есть ArrayList<String> data
как данные для вашего адаптера. Хотя вам может не понадобиться использовать ArrayList, у вас будет что-то похожее в вашем коде для представления данных в вашем ListView
Далее вы предоставляете метод очистки этих данных, реализация этого метода заключается в очистке базовой структуры данных
public void clearData() {
// clear the data
data.clear();
}
Если вы используете любой подкласс Collection, у них будет clear(), который вы могли бы использовать, как указано выше.
Как только у вас есть этот метод, вы должны называть clearData
и notifyDataSetChanged
на onClick
, поэтому код для onClick
будет выглядеть примерно так:
// listView is your instance of your ListView
SampleAdapter sampleAdapter = (SampleAdapter)listView.getAdapter();
sampleAdapter.clearData();
// refresh the View
sampleAdapter.notifyDataSetChanged();
если вы использовали объект List и передали его на адаптер, вы можете удалить значение из объекта List и вызвать объект-атрибут notifyDataSetChanged() с помощью объекта-адаптера.
например.
List<String> list = new ArrayList<String>();
ArrayAdapter adapter;
adapter = new ArrayAdapter<String>(DeleteManyTask.this,
android.R.layout.simple_list_item_1,
(String[])list.toArray(new String[0]));
listview = (ListView) findViewById(R.id.list);
listview.setAdapter(adapter);
listview.setAdapter(listAdapter);
для удаления выполните этот путь
list.remove(index); //or
list.clear();
adpater.notifyDataSetChanged();
или без объекта списка удалить элемент из списка.
adapter.clear();
adpater.notifyDataSetChanged();
Вы можете использовать только
lv.setAdapter(null);
Я использовал это утверждение, и это сработало для меня:
setListAdapter(null)
Этот вызов вызывает конструктор по умолчанию, который ничего не делает в классе, расширяет BaseAdapter.
Я просто очищаю arraylist, попробую values.clear();
values = new ArrayList<String>();
values.clear();
ArrayAdapter <String> adapter;
adapter = new ArrayAdapter<String>(this, R.layout.list,android.R.id.text1, values);
lista.setAdapter(adapter);
Извлеките данные из adapter
и вызовите adapter.notifyDataSetChanged();
используйте любой из следующих вариантов, который соответствует вашим требованиям.
listview.removeViews(1,listview.getChildCount());
или
listview.removeViewInLayout(your view);