Очистить содержимое listview?
У меня есть небольшая проблема с ListView. Как очистить содержимое listview, зная, что у него есть пользовательский адаптер?
изменить : пользовательский класс адаптера расширяет 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;
}
}
10 ответов:
Я думаю, вы передали список или массив адаптеру. Если вы сохраните экземпляр этой добавленной коллекции, вы можете сделать
collection.clear(); listview.getAdapter().notifyDataSetChanged();
это будет работать только в том случае, если вы создали экземпляр адаптера с коллекция и это тот же самый экземпляр.
кроме того, в зависимости от адаптера вы расширили, вы не можете быть в состоянии сделать это. SimpleAdapter используется для статических данных, поэтому он не может быть обновлено после создания.
PS. не все адаптеры имеют а очистить() метод. ArrayAdapter, но
или 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(); } };;
удалить элементы из пользовательского адаптера и вызов
notifyDataSetChanged()
.
существует решение для повторяющейся записи в listview. Вы должны объявить
onBackPress()
- метод на вашей деятельности и запишите код выделения, приведенный ниже:@Override public void onBackPressed() { // TODO Auto-generated method stub super.onBackPressed(); ** attendence_webdata.clear(); list.setAdapter(null); -------------------------------------------------- ** }
вам нужно позвонить обоим
clear()
от ArrayAdapter иnotifyDataSetChanged()
оба.ниже ссылке клик