Intereting Posts

Удалить элементы ListView в Android

Может кто-нибудь, пожалуйста, дать мне пример кода удаления всех элементов ListView и замены на новые элементы?

Я попытался заменить элементы адаптера без успеха. Мой код

populateList(){ results //populated arraylist with strings ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, results); listview.setAdapter(adapter); adapter.notifyDataSetChanged(); listview.setOnItemClickListener(this); } // now populating list again repopulateList(){ results1 //populated arraylist with strings ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, results1); listview.setAdapter(adapter1); adapter1.notifyDataSetChanged(); listview.setOnItemClickListener(this); } 

Здесь метод repopulateList() будет добавлять элементы ListView, но не удаляет / не заменяет все элементы ListView.

Solutions Collecting From Web of "Удалить элементы ListView в Android"

Вы захотите remove() элемент из объекта адаптера, а затем просто запустите notifyDatasetChanged() на адаптере, любой ListView будет (должен) перерабатывать и обновлять самостоятельно.

Ниже приведен краткий пример активности с AlertDialog s:

 adapter = new MyListAdapter(this); lv = (ListView) findViewById(android.R.id.list); lv.setAdapter(adapter); lv.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> a, View v, int position, long id) { AlertDialog.Builder adb=new AlertDialog.Builder(MyActivity.this); adb.setTitle("Delete?"); adb.setMessage("Are you sure you want to delete " + position); final int positionToRemove = position; adb.setNegativeButton("Cancel", null); adb.setPositiveButton("Ok", new AlertDialog.OnClickListener() { public void onClick(DialogInterface dialog, int which) { MyDataObject.remove(positionToRemove); adapter.notifyDataSetChanged(); }}); adb.show(); } }); 

Вы можете использовать

 adapter.clear() 

Который удалит все элементы вашего первого адаптера, тогда вы можете либо установить другой адаптер, либо повторно использовать адаптер, либо добавить элементы в старый адаптер. Если вы используете

 adapter.add() 

Для добавления данных в ваш список вам не нужно вызывать notifyDataSetChanged

Я думаю, что если вы добавите следующий код, он будет работать

 listview.invalidateViews(); 

Чтобы удалить элемент, просто удалите этот элемент из arraylist, который мы передали адаптеру, и выполните listview.invalidateViews();
Это обновит список

 int count = adapter.getCount(); for (int i = 0; i < count; i++) { adapter.remove(adapter.getItem(i)); } 

Затем вызовите notifyDataSetChanged();

Удалите его из адаптера, а затем уведомите массив, который изменил набор данных.

 m_adapter.remove(o); m_adapter.notifyDataSetChanged(); 
  names = db.getSites(); la = new ArrayAdapter<String>(EditSiteList.this, android.R.layout.simple_list_item_1, names); EditSiteList.this.setListAdapter(la); listview.invalidateViews(); 

Этот код отлично работает для меня.

  • Вы должны использовать только один адаптер, связанный со списком данных, который вам нужно перечислить
  • Когда вам нужно удалить и заменить все элементы, вам необходимо очистить все элементы из списка данных, используя «list.clear ()», а затем добавить новые данные, используя «list.addAll (List)»

Вот пример:

 List<String> myList = new ArrayList<String>(); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myList); listview.setAdapter(adapter); listview.setOnItemClickListener(this); populateList(){ List<String> result = getDataMethods(); myList.addAll(result); adapter.notifyDataSetChanged(); } repopulateList(){ List<String> result = getDataMethods(); myList.clear(); myList.addAll(result); adapter.notifyDataSetChanged(); } 

Попробуйте этот код, он работает для меня.

 public class Third extends ListActivity { private ArrayAdapter<String> adapter; private List<String> liste; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_third); String[] values = new String[] { "Android", "iPhone", "WindowsMobile", "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X", "Linux", "OS/2" }; liste = new ArrayList<String>(); Collections.addAll(liste, values); adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, liste); setListAdapter(adapter); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { liste.remove(position); adapter.notifyDataSetChanged(); } } 

Сначала вы должны удалить элемент из своего списка. Позже вы можете удалить свой адаптер и пополнить его новым списком.

 private void add(final List<Track> trackList) { MyAdapter bindingData = new MyAdapter(MyActivity.this, trackList); list = (ListView) findViewById(R.id.my_list); // TODO list.setAdapter(bindingData); // Click event for single list row list.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, final int position, long id) { // ShowPlacePref(places, position); AlertDialog.Builder showPlace = new AlertDialog.Builder( Favoriler.this); showPlace.setMessage("Remove from list?"); showPlace.setPositiveButton("DELETE", new OnClickListener() { public void onClick(DialogInterface dialog, int which) { trackList.remove(position); //FIRST OF ALL REMOVE ITEM FROM LIST list.setAdapter(null); // THEN EMPTY YOUR ADAPTER add(trackList); // AT LAST REFILL YOUR LISTVIEW (Recursively) } }); showPlace.setNegativeButton("CANCEL", new OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }); showPlace.show(); } }); } 

Это просто. Сначала вы должны очистить свою коллекцию и после четкого списка, как этот код:

  yourCollection.clear(); setListAdapter(null); 

Вы можете использовать

  lv.setAdapter(null);