web-dev-qa-db-fra.com

Comment supprimer la listeVoir tous les éléments

Dans mon application, si vous cliquez sur un bouton, je souhaite supprimer tous les éléments de la liste. Ici, j'utilise l'adaptateur de base pour ajouter les éléments à la liste.

Comment puis-je supprimer les éléments de la vue de liste de manière dynamique.

33
naresh

Appelez à nouveau setListAdapter(). Cette fois avec une ArrayList vide.

36
mah

ListView fonctionne sur la base des données sous-jacentes dans le Adapter. Pour effacer le ListView, vous devez faire deux choses:

  1. Effacez les données que vous définissez de l'adaptateur.
  2. Actualisez la vue en appelant notifyDataSetChanged

Par exemple, voir le squelette de SampleAdapter ci-dessous qui étend le BaseAdapter


public class SampleAdapter extends BaseAdapter {

    ArrayList<String> data;

    public SampleAdapter() {
        this.data = new ArrayList<String>();
    }

    public int getCount() {
        return data.size();
    }

    public Object getItem(int position) {
        return data.get(position);
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        // your View
        return null;
    }
}

Vous avez ici le ArrayList<String> data comme données pour votre adaptateur. Bien que vous ne puissiez pas nécessairement utiliser ArrayList, vous aurez quelque chose de similaire dans votre code pour représenter les données dans votre ListView

Ensuite, vous fournissez une méthode pour effacer ces données, la mise en œuvre de cette méthode consiste à effacer la structure de données sous-jacente


public void clearData() {
    // clear the data
    data.clear();
}

Si vous utilisez une sous-classe de Collection , ils auront la méthode clear () que vous pourriez utiliser comme ci-dessus.

Une fois que vous avez cette méthode, vous voulez appeler clearData et notifyDataSetChanged sur votre onClick ainsi le code pour onClick ressemblera à quelque chose comme:


// listView is your instance of your ListView
SampleAdapter sampleAdapter = (SampleAdapter)listView.getAdapter();
sampleAdapter.clearData();

// refresh the View
sampleAdapter.notifyDataSetChanged();
24
momo

si vous avez utilisé l'objet List et passé à l'adaptateur, vous pouvez supprimer la valeur de l'objet List et appeler le notifyDataSetChanged () à l'aide de l'objet adaptateur.

par exemple.

List<String> list = new ArrayList<String>();
ArrayAdapter adapter;


adapter = new ArrayAdapter<String>(DeleteManyTask.this, 
            Android.R.layout.simple_list_item_1,
            (String[])list.toArray(new String[0]));

listview = (ListView) findViewById(R.id.list);
listview.setAdapter(adapter);

listview.setAdapter(listAdapter);

pour supprimer faire de cette façon

list.remove(index); //or
list.clear();
adpater.notifyDataSetChanged();

ou sans objet de liste, supprimer l'élément de la liste.

adapter.clear();
adpater.notifyDataSetChanged();
10
Pratik

Vous ne pouvez utiliser que

 lv.setAdapter(null);
8
kksal55

Tu peux le faire:

listView.setAdapter(null);
4
codingpuss

J'ai utilisé cette déclaration et cela a fonctionné pour moi:

   setListAdapter(null)

Celui-ci appelle un constructeur par défaut qui ne fait rien dans une classe étend BaseAdapter.

4
Amt87

Je nettoie simplement l'arraylist, essayez values.clear ();

values = new ArrayList<String>();
values.clear();

ArrayAdapter <String> adapter;
adapter = new ArrayAdapter<String>(this, R.layout.list,Android.R.id.text1, values); 
lista.setAdapter(adapter);
3
SRD

Une autre approche après avoir essayé les solutions ci-dessous. Lorsque vous en avez besoin, initialisez simplement votre liste sur une nouvelle liste claire.

List<ModelData> dataLists = new ArrayList<>();
                RaporAdapter adapter = new RaporAdapter(AyrintiliRapor.this, dataLists);
                listview.setAdapter(adapter);

Ou définissez la visibilité sur Disparu/Invisible selon vos besoins

img_pdf.setVisibility(View.INVISIBLE);
0
Sam

Supprimez les données de adapter et appelez adapter.notifyDataSetChanged();

0
Vineet Shukla

Pour moi, j'ai travaillé de cette façon:

private ListView yourListViewName;
private List<YourClassName> yourListName;

  ...

yourListName = new ArrayList<>();
yourAdapterName = new yourAdapterName(this, R.layout.your_layout_name, yourListName);

  ...

if (yourAdapterName.getCount() > 0) {
   yourAdapterName.clear();
   yourAdapterName.notifyDataSetChanged();
}

yourAdapterName.add(new YourClassName(yourParameter1, yourParameter2, ...));
yourListViewName.setAdapter(yourAdapterName);
0
Robert Pal

utilisez l'une des options ci-dessous qui convient à vos besoins

listview.removeViews(1,listview.getChildCount());

ou

listview.removeViewInLayout(your view);
0
Balaji.K