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

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

}

Ответ 1

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

listView.setAdapter(null);

Ответ 2

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

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

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

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

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

Ответ 3

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

 yourCollection.clear();
 setListAdapter(null);

Ответ 4

Как и в версиях 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();
        }
    };;

Ответ 5

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

YourArrayList_Object.clear();

Ответ 6

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

Ответ 7

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

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

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

    **
 }

Ответ 8

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

Ответ 9

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

Ответ 10

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

Ниже приведена ссылка нажмите