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.
Appelez à nouveau setListAdapter()
. Cette fois avec une ArrayList vide.
ListView
fonctionne sur la base des données sous-jacentes dans le Adapter
. Pour effacer le ListView
, vous devez faire deux choses:
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();
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();
Vous ne pouvez utiliser que
lv.setAdapter(null);
Tu peux le faire:
listView.setAdapter(null);
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.
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);
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);
Supprimez les données de adapter
et appelez adapter.notifyDataSetChanged();
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);
utilisez l'une des options ci-dessous qui convient à vos besoins
listview.removeViews(1,listview.getChildCount());
ou
listview.removeViewInLayout(your view);