Quelqu'un peut-il me donner s'il vous plaît un exemple de code de suppression de tous les éléments ListView et de remplacement par de nouveaux éléments?
J'ai essayé de remplacer les éléments de l'adaptateur sans succès. Mon code est
populateList(){
results //populated arraylist with strings
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
Android.R.layout.simple_list_item_1, results);
listview.setAdapter(adapter);
adapter.notifyDataSetChanged();
listview.setOnItemClickListener(this);
}
// now populating list again
repopulateList(){
results1 //populated arraylist with strings
ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this,
Android.R.layout.simple_list_item_1, results1);
listview.setAdapter(adapter1);
adapter1.notifyDataSetChanged();
listview.setOnItemClickListener(this);
}
Ici, la méthode repopulateList()
sera ajoutée aux éléments ListView, mais elle ne supprime/remplace pas tous les éléments ListView.
Vous souhaiterez remove()
l'élément de votre objet adaptateur, puis exécutez simplement le notifyDatasetChanged()
sur l'adaptateur. Tout ListView
s sera (devrait) recyclé et mis à jour par lui-même.
Voici un bref exemple d'activité avec AlertDialog
s:
adapter = new MyListAdapter(this);
lv = (ListView) findViewById(Android.R.id.list);
lv.setAdapter(adapter);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
AlertDialog.Builder adb=new AlertDialog.Builder(MyActivity.this);
adb.setTitle("Delete?");
adb.setMessage("Are you sure you want to delete " + position);
final int positionToRemove = position;
adb.setNegativeButton("Cancel", null);
adb.setPositiveButton("Ok", new AlertDialog.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
MyDataObject.remove(positionToRemove);
adapter.notifyDataSetChanged();
}});
adb.show();
}
});
Je pense que si vous ajoutez le code suivant, cela fonctionnera
listview.invalidateViews();
Pour supprimer un élément, il suffit de supprimer cet élément de la liste que nous avons transmise à l'adaptateur et de faire listview.invalidateViews();
Ceci actualisera la liste
Vous pouvez utiliser
adapter.clear()
cela supprimera tous les éléments de votre premier adaptateur, vous pourrez alors définir un autre adaptateur ou le réutiliser et ajouter les éléments à l'ancien. Si tu utilises
adapter.add()
pour ajouter des données à votre liste, vous n'avez pas besoin d'appeler notifyDataSetChanged
int count = adapter.getCount();
for (int i = 0; i < count; i++) {
adapter.remove(adapter.getItem(i));
}
puis appelez notifyDataSetChanged();
Supprimez-le de l'adaptateur, puis informez arrayadapter que l'ensemble de données a été modifié.
m_adapter.remove(o);
m_adapter.notifyDataSetChanged();
names = db.getSites();
la = new ArrayAdapter<String>(EditSiteList.this,
Android.R.layout.simple_list_item_1, names);
EditSiteList.this.setListAdapter(la);
listview.invalidateViews();
ce code fonctionne bien pour moi.
voici un exemple:
List<String> myList = new ArrayList<String>();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, Android.R.layout.simple_list_item_1, myList);
listview.setAdapter(adapter);
listview.setOnItemClickListener(this);
populateList(){
List<String> result = getDataMethods();
myList.addAll(result);
adapter.notifyDataSetChanged();
}
repopulateList(){
List<String> result = getDataMethods();
myList.clear();
myList.addAll(result);
adapter.notifyDataSetChanged();
}
Essayez ce code, ça marche pour moi.
public class Third extends ListActivity {
private ArrayAdapter<String> adapter;
private List<String> liste;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_third);
String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
"Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
"Linux", "OS/2" };
liste = new ArrayList<String>();
Collections.addAll(liste, values);
adapter = new ArrayAdapter<String>(this,
Android.R.layout.simple_list_item_1, liste);
setListAdapter(adapter);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
liste.remove(position);
adapter.notifyDataSetChanged();
}
}
Au début, vous devriez supprimer l'élément de votre liste. Plus tard, vous pourrez vider votre adaptateur et le remplir avec une nouvelle liste.
private void add(final List<Track> trackList) {
MyAdapter bindingData = new MyAdapter(MyActivity.this, trackList);
list = (ListView) findViewById(R.id.my_list); // TODO
list.setAdapter(bindingData);
// Click event for single list row
list.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
final int position, long id) {
// ShowPlacePref(places, position);
AlertDialog.Builder showPlace = new AlertDialog.Builder(
Favoriler.this);
showPlace.setMessage("Remove from list?");
showPlace.setPositiveButton("DELETE", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
trackList.remove(position); //FIRST OF ALL REMOVE ITEM FROM LIST
list.setAdapter(null); // THEN EMPTY YOUR ADAPTER
add(trackList); // AT LAST REFILL YOUR LISTVIEW (Recursively)
}
});
showPlace.setNegativeButton("CANCEL", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
showPlace.show();
}
});
}
C’est simple. Commencez par vider votre collection et ensuite effacer une liste comme celle-ci:
yourCollection.clear();
setListAdapter(null);