Очистить содержимое списка? - PullRequest
73 голосов
/ 27 сентября 2010

У меня маленькая проблема с 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;
    }

}

Ответы [ 10 ]

190 голосов
/ 19 августа 2011

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

listView.setAdapter(null);
53 голосов
/ 27 сентября 2010

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

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

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

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

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

7 голосов
/ 06 марта 2015

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

 yourCollection.clear();
 setListAdapter(null);
3 голосов
/ 24 июля 2017

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

Просто сделайте:

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

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

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

    runOnUiThread(mRunnable);

Где mRunnable будет:

    Runnable mRunnable = new Runnable() {
        public void run() {
            mList.clear();
            mAdapter.notifyDataSetChanged();
        }
    };;
1 голос
/ 15 декабря 2016

Простое меня это работает :)

YourArrayList_Object.clear();
0 голосов
/ 27 декабря 2016

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

0 голосов
/ 09 июля 2015

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

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

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

    **
 }
0 голосов
/ 28 декабря 2010

Вам необходимо позвонить как clear() из ArrayAdapter, так и notifyDataSetChanged() обоим.

Ниже находится ссылка нажмите

0 голосов
/ 27 сентября 2010

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

0 голосов
/ 27 сентября 2010

Удалите ваши вещи из вашего адаптера и позвоните notifyDataSetChanged().

...