Aller au contenu

List Activity et ArrayAdapter


guigs06

Recommended Posts

Bonjour,

J'ai crée une classe qui étend ListActivity.

Dans cette classe j'ai un tableau pour l'instant statique pour l'alimenter :

public class Favoris extends ListActivity {

TextView selection;
String[] items = {"aa", "oo", "uu"};

@Override
protected void onCreate(Bundle savedInstanceState) {
	// TODO Auto-generated method stub
	super.onCreate(savedInstanceState);
	setContentView(R.layout.layoutfavoris);
	setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items));
	selection = (TextView)findViewById(R.id.selection);
}
}

Ce que j'aimerais faire, c'est que ce soit dynamique.

Par exemple j'ai une activité qui me demande d'ajouter un élément , je rentre donc un string à l'aide d'un EditText.

Ensuite (je peux en rentrer un deuxième, troisième, etc...) je revient à l'activité de départ pour lancer ma ListActivity.

Seulement j'aimerais que ces données soit dynamiques et qu'elles persistent.

Puis-je utiliser les Préférences ? Si oui, dans quelle mesure (j'ai vu qu'il fallait créer un fichier xml, puis-je écrire dedans à chaque nouvelle entrée) ?

Comment pourrais-je m'y prendre ? (j'ai vu qu'il fallait peut-être étendre la classe ArrayAdapter, etc..)

Merci d'avance :)

Lien vers le commentaire
Partager sur d’autres sites

Personnellement, j'utiliserais une base de données et un CursorAdapter... ;)

D'accord merci pour la réponse.

Mais une base de données ça ne fait pas lourd juste pour une liste de favoris qui contienne juste un titre et 2 strings (trois tableaux au final) ?

Sur l'iPhone j'utilisais Plist ou préférences, mais je ne vois pas trop comment l'utiliser sur Androïd sans me coltiner une création de base de données, etc...

Lien vers le commentaire
Partager sur d’autres sites

C'est effectivement un peu ch... ennuyeux à mettre en place mais au moins tu es tranquille... Concernant la taille, si justement tu ne mets pas grand chose dedans, elle ne sera pas énorme...

Je me sers même des bases de données pour retenir une seule valeur, des fois! Je reconnais que ce n'est pas très propre et que les préférences, ça sert à ça, mais je n'ai pas encore pu me pencher là dessus...

Tu souhaites que ta liste soit stockée le temps de l'exécution de l'appli ou plutôt indéfiniment?

Parce que si c'est temporaire, tu peux aussi utiliser un ArrayList<String>...

Lien vers le commentaire
Partager sur d’autres sites

Par exemple voici ce que je fais avec des arraylist:

private void serialiseArrayList(ArrayList<HashMap<String, String>> arraylist, String fichier){	

	try {
		OutputStream fos = openFileOutput(fichier, MODE_PRIVATE);
		ObjectOutputStream oos = new ObjectOutputStream(fos);	            	
		oos.writeObject(arraylist); oos.close();fos.close();	            	
	}
	catch(IOException ioe) {
		ioe.printStackTrace();
	}	         
}

//------------------Deserialisation des listes------------------//
@SuppressWarnings("unchecked")
ArrayList<HashMap<String, String>> deserialiseArrayList(String fichier){
	//Deserialisation	
	ArrayList<HashMap<String, String>> arraylist=new ArrayList<HashMap<String, String>>();
	try {
		InputStream fIn = openFileInput(fichier);
		ObjectInputStream isr = new ObjectInputStream(fIn);             
		arraylist = (ArrayList<HashMap<String, String>>)isr.readObject();
		isr.close(); fIn.close();
	} 
	catch (Exception e) {       
	} 
	return arraylist;
}

l'objet est sauvé dans un fichier 'tel quel' (sérialisé) avec la méthode serialiseArrayList

et récupéré quand nécessaire avec la méthode deserialiseArrayList

je ne sais trop si c'est ce genre de choses que tu veux faire, mais c'est pas mal pour que tes données persistent (et même quand tu relance ton appli)

Lien vers le commentaire
Partager sur d’autres sites

Ouaaaahhh!!! Là, j'ai rien pigé! lol...

Je crois que je vais creuser un peu de ce coté, ça semble compliqué donc ça doit être utile... looool

Merci laby! ^^

C'est au contraire très simple de sérialiser des objets, après je ne suis pas certain que dans ton cas ce soit la meilleure solution

Lien vers le commentaire
Partager sur d’autres sites

Tu peux peut être serialiser

Oui c'est exactement ça (je ne trouvais pas le mot..)

Merci beaucoup pour le code, je vais essayer de comprendre le fonctionnement !

Mais si j'ai bien compris en gros je récupère une arrayList depuis un fichier xml, ensuite j'ajoute mon item et la ArrayList, au moment de l'ajout d'un item, est reconvertie en fichier xml , celui-là même que j'utilise pour alimenter ma listView. C'est ça ?

Merci :)

Lien vers le commentaire
Partager sur d’autres sites

Tu souhaites que ta liste soit stockée le temps de l'exécution de l'appli ou plutôt indéfiniment?

Indéfiniment.. (si la personne éteint son téléphone et le rallume, en lançant l'application , les données doivent encore être présentes).

En gros j'aurais 3 ArrayList à stocker.

J'explique :

Un utilisateur arrive sur son activité, il peux ajouter aux favoris un itinéraire.

Donc "nom de l'itinéraire", "départ", "arrivée".

Ensuite depuis l'accueil il peut lancer l'activité "favoris" qui est une listActivity avec les noms itinéraires qui s'affiche.

Il peux en sélectionner une pour visualiser départ et retour, ou bien supprimer un favoris.

J'avais pensé utiliser les préférences au départ, mais apparemment ce n'est pas adapté pour les tableaux et on ne peut pas supprimer..

Du coup je vais essayer la sérialisation, pour peut-être écrire dans le fichier xml qui alimente ma listView..

Qu'en pensez-vous ?

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

J'ai réussi à faire cette liste en utilisant un fichier externe pour les données, merci beaucoup ! :)

Maintenant j'aimerais ajouter une possibilité de supprimer un élément (soit par un long click sur la cellule, soit par un bouton "delete" qui se trouve dans la cellule)

Comment pourrais-je faire sachant que j'utilise un ArrayAdapter avec une ArrayList.

J'ai vu un tuto qui utilisait un OnLongItemClick mais je n'ai pas réussi à l'implémenter dans mon cas..

Rajouter un bouton delete est-il possible sachant que quand je click sur une cellule cela prends toute la cellule (donc le onListItemClick), du coup je ne suis pas certain que mon action sur le bouton delete soit prise en compte.

Comment puis-je faire ?

Merci beaucoup

EDIT : ça a l'air de marcher en créant une classe qui étend ArrayAdapter et en mettant un bouton dans une ressource xml... reste plus qu'à mettre à jour la liste après le clique :)

EDIT : C'est ok !!

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...