Ответ 1
Просто напишите
listView.setAdapter(null);
У меня есть небольшая проблема с ListView
. Как очистить содержимое 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= v.findViewById(R.id.dexter);
v.setTag(holder);
} else {
holder = 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);
Как и в версиях 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();
}
};;
Просто это работает мне :)
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();
в свой метод
Вызвать clear()
метод из вашего пользовательского адаптера.
Вам нужно вызвать оба clear()
из ArrayAdapter и notifyDataSetChanged()
обоих.
Ниже приведена ссылка нажмите