Очистить содержимое 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 70

10 ответов:

просто писать

listView.setAdapter(null);

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

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();
        }
    };;

простой ее работы мне:)

YourArrayList_Object.clear();

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

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

@Override
public void onBackPressed() {
    // TODO Auto-generated method stub
    super.onBackPressed();
    **

    attendence_webdata.clear(); list.setAdapter(null);
    --------------------------------------------------

    **
 }

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

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

ниже ссылке клик

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