Очистить содержимое списка?

У меня небольшая проблема с listview. Как очистить содержимое списка, зная, что у него есть пользовательский адаптер?

Edit: пользовательский класс адаптера расширяет BaseAdapter, он выглядит так:

import android.app.Activity; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; public class MyAdapter extends BaseAdapter { private Activity activity; private String[] data; private static LayoutInflater inflater=null; public MyAdapter(Activity _a, String[] _str) { activity = _a; data = _str; inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } public static class ViewHolder{ public TextView text; } @Override public int getCount() { return data.length; } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View view, ViewGroup parent) { View v = view; ViewHolder holder; if(v == null) { v = inflater.inflate(R.layout.rowa, null); holder=new ViewHolder(); holder.text=(TextView)v.findViewById(R.id.dexter); v.setTag(holder); }else{ holder=(ViewHolder)v.getTag(); } holder.text.setText(data[position]); return v; } } 

Просто напишите

 listView.setAdapter(null); 

Я думаю, вы передали список или массив в адаптер. Если вы сохраните экземпляр этой добавленной коллекции, вы можете сделать

 collection.clear(); listview.getAdapter().notifyDataSetChanged(); 

Это будет работать, только если вы создали экземпляр адаптера с коллекцией, и это тот же экземпляр.

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

PS. Не все адаптеры имеют метод clear () . ArrayAdapter делает, но ListAdapter или SimpleAdapter не делают

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

  yourCollection.clear(); setListAdapter(null); 

Слишком поздно. Просто его работы меня 🙂

YourArrayList_Object.clear ();

Удалите элементы из пользовательского адаптера и вызовите notifyDataSetChanged() .

Существует решение для дублирования записи в списке. Вы должны объявить метод onBackPress() в своей деятельности и записать код выделения, указанный ниже:

 @Override public void onBackPressed() { // TODO Auto-generated method stub super.onBackPressed(); ** attendence_webdata.clear(); list.setAdapter(null); -------------------------------------------------- ** } 

Просто поставьте код ListView.Items.Clear(); По вашему методу

Начиная с версий Android M и N, следующие работы для меня и будут правильным подходом. Опорожнение ListView или установка адаптера в null – это не правильный подход и приведет к ошибке нулевого указателя, недействительному ListView и / или сбою приложения.

Просто выполните:

  mList.clear(); mAdapter.notifyDataSetChanged(); 

Т.е. сначала вы полностью очистите список, а затем сообщите адаптеру об этом изменении. Android позаботится о правильном обновлении пользовательского интерфейса с пустым списком. В моем случае мой список – это ArrayList.

Если вы выполняете эту операцию из другого потока, запустите этот код в потоке пользовательского интерфейса:

  runOnUiThread(mRunnable); 

Где mRunnable будет:

  Runnable mRunnable = new Runnable() { public void run() { mList.clear(); mAdapter.notifyDataSetChanged(); } };; 

Вам нужно вызвать оба clear() из ArrayAdapter и notifyDataSetChanged() .

Ниже приведен щелчок ссылки.

Вызовите метод clear() из пользовательского адаптера.