comment effacer ArrayAdapter personnalisé ListView
c'est comment j'ai ajouter des éléments à la liste:
public class ServersAdapter extends ArrayAdapter<String> {
public ServersAdapter(Context context, int resource, int textViewResourceId, String[] servers) {
super(context, resource, textViewResourceId, servers);
Log.d("noc", "ServersAdapterin: ");
//TODO Auto-generated constructor stub
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.d("noc", "getView: ");
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View row = inflater.inflate(R.layout.servers_list, parent, false);
Log.d("noc", "inflate: ");
//datasource = new ServersDataSource(getContext());
datasource.open();
//servir list
Log.d("noc", "ServersDataSource: ");
Server[] servers = datasource.getAllServers();
ImageView iv = (ImageView) row.findViewById(R.id.imageView1);
TextView tv = (TextView) row.findViewById(R.id.textView1);
Log.d("noc", "setText: ");
if (servers.length > 0) {
tv.setText(servers[position].getTitle());
Log.d("noc", "getTitle: ");
Log.d("noc", "servers[position].getTitle()-==================: "+ servers[position].getTitle());
if (servers[position].getEnabled() < 1) {
iv.setImageResource(R.drawable.ic_server_status_red);
} else {
iv.setImageResource(R.drawable.ic_server_status_green);
}
}
return row;
}
}
c'est le onCreate:
......
try {
Log.d("noc", "need to delete this: ");
datasource = new ServersDataSource(this);
datasource.open();
//servir list
Log.d("noc", "servir list: ");
//String[] servers = new String[10];
//servir list
Log.d("noc", "ServersDataSource: ");
String[] servers = new String[10];
Log.d("noc", "end need to delete this");
ArrayAdapter<Server> adapter = new ServersAdapter(this, android.R.layout.simple_list_item_1, R.id.textView1, servers);
setListAdapter(adapter);
} catch (Exception e) {
Log.d("noc", "error (ArrayAdapter): " + e.toString());
}
Je n'arrive pas à effacer une liste de l'ensemble de son contenu (je suis en train de le vider). J'ai essayé de faire comme ceci:
ArrayAdapter<Server> adapter = (ArrayAdapter<Server>) getListAdapter();
Server server = null;
switch (view.getId()) {
case R.id.add:
//Save the new server to the database
//server_id, "title", "url", "ip", enabled, "services", fetch_interval
server = datasource.createServer(1, "title of the server", "url of the server", "ip of the server", 1, "services of the server", 1);
adapter.add(server);
break;
case R.id.delete:
Log.d("noc", "delete ");
if (getListAdapter().getCount() > 0) {
datasource.emptyServersTable();
Log.d("noc", "clear ");
adapter.clear();
Log.d("noc", "after clear ");
}
break;
}
Log.d("noc", "notifyDataSetChanged");
adapter.notifyDataSetChanged();
et c'est la sortie, cliquez sur "supprimer":
01-11 23:41:54.210: D/noc(14898): delete
01-11 23:41:54.210: D/noc(14898): emptyServersTable:
01-11 23:41:54.230: D/noc(14898): clear
01-11 23:41:54.230: D/AndroidRuntime(14898): Shutting down VM
01-11 23:41:54.230: W/dalvikvm(14898): threadid=1: thread exiting with uncaught exception (group=0x4140e2a0)
01-11 23:41:54.230: E/AndroidRuntime(14898): FATAL EXCEPTION: main
01-11 23:41:54.230: E/AndroidRuntime(14898): java.lang.IllegalStateException: Could not execute method of the activity
01-11 23:41:54.230: E/AndroidRuntime(14898): at android.view.View$1.onClick(View.java:3699)
01-11 23:41:54.230: E/AndroidRuntime(14898): at android.view.View.performClick(View.java:4223)
01-11 23:41:54.230: E/AndroidRuntime(14898): at android.view.View$PerformClick.run(View.java:17275)
01-11 23:41:54.230: E/AndroidRuntime(14898): at android.os.Handler.handleCallback(Handler.java:615)
01-11 23:41:54.230: E/AndroidRuntime(14898): at android.os.Handler.dispatchMessage(Handler.java:92)
01-11 23:41:54.230: E/AndroidRuntime(14898): at android.os.Looper.loop(Looper.java:137)
01-11 23:41:54.230: E/AndroidRuntime(14898): at android.app.ActivityThread.main(ActivityThread.java:4898)
01-11 23:41:54.230: E/AndroidRuntime(14898): at java.lang.reflect.Method.invokeNative(Native Method)
01-11 23:41:54.230: E/AndroidRuntime(14898): at java.lang.reflect.Method.invoke(Method.java:511)
01-11 23:41:54.230: E/AndroidRuntime(14898): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008)
01-11 23:41:54.230: E/AndroidRuntime(14898): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775)
01-11 23:41:54.230: E/AndroidRuntime(14898): at dalvik.system.NativeStart.main(Native Method)
01-11 23:41:54.230: E/AndroidRuntime(14898): Caused by: java.lang.reflect.InvocationTargetException
01-11 23:41:54.230: E/AndroidRuntime(14898): at java.lang.reflect.Method.invokeNative(Native Method)
01-11 23:41:54.230: E/AndroidRuntime(14898): at java.lang.reflect.Method.invoke(Method.java:511)
01-11 23:41:54.230: E/AndroidRuntime(14898): at android.view.View$1.onClick(View.java:3694)
01-11 23:41:54.230: E/AndroidRuntime(14898): ... 11 more
01-11 23:41:54.230: E/AndroidRuntime(14898): Caused by: java.lang.UnsupportedOperationException
01-11 23:41:54.230: E/AndroidRuntime(14898): at java.util.AbstractList.remove(AbstractList.java:638)
01-11 23:41:54.230: E/AndroidRuntime(14898): at java.util.AbstractList$SimpleListIterator.remove(AbstractList.java:75)
01-11 23:41:54.230: E/AndroidRuntime(14898): at java.util.AbstractList.removeRange(AbstractList.java:658)
01-11 23:41:54.230: E/AndroidRuntime(14898): at java.util.AbstractList.clear(AbstractList.java:466)
01-11 23:41:54.230: E/AndroidRuntime(14898): at android.widget.ArrayAdapter.clear(ArrayAdapter.java:258)
01-11 23:41:54.230: E/AndroidRuntime(14898): at com.wr.noc.ServersStatus.onClick(ServersStatus.java:91)
01-11 23:41:54.230: E/AndroidRuntime(14898): ... 14 more
alors quel est le problème. est-il un autre moyen pour le faire?
Êtes-vous passer d'un Tableau à la carte ou un
Post comment vous créez votre ArrayAdapter, qu'elle n'utilise la primitive Tableau?
avez-vous essayer d'appeler
Comment avez-vous créer ArrayAdapter, vous utilisez peut-être une liste immuable à l'arrière.
Il a probablement passé un tableau qui est transformée en une liste spéciale pour enlever n'est pas mis en œuvre.
ArrayList
?Post comment vous créez votre ArrayAdapter, qu'elle n'utilise la primitive Tableau?
avez-vous essayer d'appeler
setListAdapter(null);
au lieu de clear
Comment avez-vous créer ArrayAdapter, vous utilisez peut-être une liste immuable à l'arrière.
Il a probablement passé un tableau qui est transformée en une liste spéciale pour enlever n'est pas mis en œuvre.
OriginalL'auteur Waqleh | 2013-01-11
Vous devez vous connecter pour publier un commentaire.
Vous devriez essayer de remplacer la
clear()
méthode dans leServersAdapter
classe et ajouter un appel à l'clear()
méthode de votreArrayList
si vous en avez un. Si vos données sont chargées dans les vues à partir d'un tableau vide.En regardant ton code, je pense que le concerné est serveurs.
Ouais mais le
ArrayAdapter
n'est pas censé contenir les données, souvent leAdapter
contient unArrayList
, ou un tableau normal, et ensuite placer les données de chaque objet du tableau dans la vue créée dans legetView()
à l'aide de l'int position pour obtenir les données relatives à cet indice dans le tableau/liste de tableaux.Actuellement, il ne fonctionne pas parce que dans votre constructeur vous passez un
String[]
tableau qui n'est pas le seul qui contiennent les données que vous voulez charger dans les vues. Il suffit de passer le tableau que vous utilisez dans lagetView()
méthode qui est appelée serveurs et ensuite utiliser l'index pour obtenir les données à cette position dans le tableau.pouvez-vous montrer comment je peut faire
OriginalL'auteur flawyte
Je suppose que vous avez passé d'une Liste ou d'un Tableau à l'Adaptateur. Si vous gardez l'instance de cette ajouté des articles, vous pouvez faire un:
Pas toutes les Cartes ont un
clear()
méthode. ArrayAdapter n', maisListAdapter
ouSimpleAdapter
ne pasJe ne pense pas .notifyDataSetChanged() est une méthode valide appel ici. Il ne fonctionne pas dans ce cas, il me semble.
OriginalL'auteur K_Anas
La mise en œuvre pour que le constructeur (celui avec le tableau) ne
Arrays.asList(objects)
qui crée une liste immuable. Essayer de passer dans une explicite ArrayList avec vos Chaînes de ce constructeur:OriginalL'auteur dmon
conformément à ma connaissance il n'est pas nécessaire pour effacer l'adaptateur et le jeu de notifyDataSetChanged() à l'adaptateur.
u ont utilisé la Liste de,liste de tableaux Pour l'objet ou le Tableau 1 st effacer et réinitialiser et Après la transmission des données à costume adaptateur clair utilisés tableau/liste.Il fonctionne très bien!
OriginalL'auteur user3152545
Essayer cela, il supprime tous les éléments de la Vue
OriginalL'auteur Coen Damen