Android : Tri d’une ListView tout en gardant les ids

Durant le développement du projet b-box j’ai rencontré un problème avec mon menu. Ce menu est présent sous forme de ListActivity (comprenant une ListView), était trié selon un ordre alphabétique qui est susceptible de changer puisque l’application peut-être traduite.

Au début, j’ai essayé diverses méthodes, mais les id de position étant perdus… pas moyen de savoir à quoi correspond quoi.

J’ai donc du trouver une solution, solution que je vous présente.

But

Le but est de créer un menu sous forme de liste (ListView) dont chaque élément est cliquable et permet de récupérer l’id du clic. Cet id servant à lancer une autre Activity, par exemple.

Exemple

Tout d’abord la classe Menu :

package org.android.bbox;
 
import java.util.Comparator;
 
public class Menu
{
	private int id;
	private String label;
 
	public Menu(int id, String label)
	{
		this.id = id;
		this.label = label;
	}
 
	public String getLabel()
	{
		return this.label;
	}
 
	public int getId()
	{
		return this.id;
	}
 
	public static Menu[] factory(String[] menus)
	{
		Menu[] menu = new Menu[menus.length];
		for(int i = 0; i < menus.length; i++)
		{
			menu[ i ] = new Menu(i, menus[ i ]);
		}
		return menu;
	}
 
	public static Comparator getComparator()
	{
		return new Comparator(){
			@Override
			public int compare(Menu m1, Menu m2)
			{
				return m1.getLabel().compareTo(m2.getLabel());
			}
		};
	}
 
	public String toString()
	{
		return this.getLabel();
	}
}

Et la classe de l’activité :

// ...
	public void onCreate(Bundle savedInstanceState)
	{
		//...
		Menu[] m = Menu.factory(getResources().getStringArray(R.array.main_list_array));//récupération d'un tableau de string et création d'un tableau de Menu
		ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, m);//création de l'adaptateur permettant l'affichage
		adapter.sort(Menu.getComparator());//tri du menu
		ListView myList = (ListView) findViewById(android.R.id.list);
		myList.setAdapter(adapter);//ajotu du menu à la ListView
		myList.setOnItemClickListener(this);
		//...
	}
 
	@Override
	public void onItemClick(AdapterView parent, View view, int position, long id)
	{
		System.out.print(position);
		System.out.print(" | ");
		System.out.print(parent.getItemAtPosition(position));
		System.out.print(" | ");
		System.out.print(parent.getItemAtPosition(position).getClass());
		System.out.print(" | ");
		System.out.print(((Menu)parent.getItemAtPosition(position)).getId());
		System.out.print(" | ");
		System.out.println(id);
		//...
	}
// ...

Remarque : la méthode toString permet l’affichage de l’élément dans la liste.

Future … et projets

Mon blog va évoluer d’ici quelques mois, des changements sont en perspectives.

Tout d’abord, passons en revue les sujets qui seront abordés. Encore et toujours Zend Framework, je compte continuer de publier. C’est un sujet qui m’intéresse et qui je trouve est très intéressant. Par ailleurs, je compte faire une série d’articles sur CMIS. Si vous ignorez ce que c’est … alors tant mieux!
En dehors de ces sujets principaux, seront aussi abordés des projets. Dans ceux-ci on pourra citer principalement deux choses : FSB dont le développement va reprendre (enfin …) et des projets sous Android.

Bref, des choses intéressantes et alléchantes, mais ce n’est pas tout! Je compte faire du nettoyage. Hé oui, le printemps arrive, les oiseaux chantent, et certains sortes les balais et les caisses pour le « nettoyage de printemps », ce sera donc mon cas. Depuis trop longtemps, je remet a plus tard de me faire un vrai site avec un contenu qui me correspondent et non des « machins » accumulés et qui date …

Donc :

  • des projets a réalisé
  • des sujets à aborder
  • un site renouvelé

Voilà le programme!

Mais aussi, et c’est une idée qui me trotte dans la tête depuis longtemps, éventuellement un nouveau blog ou site consacré à la cuisine.

Vous avez le menu, reste à savoir si le chef sera dans les temps.

Planet Zend Framework

Un planet sur Zend Framework, pour les francophones est née!

Tout d’abord qu’est-ce qu’un planet?
Un planet est un agrégateur de flux rss concernant un même sujet. Le but est de promouvoir mais surtout de concentrer les articles publié sur le sujet.

Pour ceux qui désirerait y goûter, je vous renvoi vers le site : zf planet

N’hésitez pas à demander a en faire partie.

FSB RC est sortie!

Je vous le disait il y a peu, la nouvelle RC de FSB 2 allait sortir.

C’est chose faites !

Les principales nouveauté sont les suivantes :

  • Chiffrement RSA pour les identifiant
  • FSBCard (idée dont je suis fier) qui permet l’export de son profil ainsi que de ses préférences
  • Un mode bas débit du forum
  • L’option d’installation rapide, génial pour les développeurs!
  • Plein de fix
  • Possibilité de mettre des sondage dans les map des message, pour rappel les maps des messages étant une présentation d’un nouveau sujet||message à posté
  • Refonte complète du système de procédure modératives

Bref on sent que la version final approche et surtout que FSB2 à un grand avenir devant lui!

Mon seul regret : le thème que je trouve bof bof

L’annonce officiel

Racontez votre utilisation des logiciels libres.

J’ai décidé, suite a ce message de participer à raconter mon utilisation d’un logiciel libre.

A noter, que le principe me fait penser à mon MPP (dont je vais retravailler le billet explicatif), et a bien d’autre truc du genre. Perso, j’adore ce système!

Bref, je vais parler de trois logiciels libres :

La suite, lorsque j’aurais rédigé les contenus!