{"id":312,"date":"2010-06-20T00:50:19","date_gmt":"2010-06-19T22:50:19","guid":{"rendered":"http:\/\/grummfy.be\/blog\/?p=312"},"modified":"2010-06-27T00:48:56","modified_gmt":"2010-06-26T22:48:56","slug":"tri-dune-listview-tout-en-gardant-les-ids","status":"publish","type":"post","link":"https:\/\/grummfy.be\/blog\/312","title":{"rendered":"Android : Tri d&rsquo;une ListView tout en gardant les ids"},"content":{"rendered":"<p>Durant le d\u00e9veloppement du projet <a title=\"Projet B-Box\" href=\"http:\/\/code.google.com\/p\/b-box\/\" target=\"_blank\">b-box<\/a> j&rsquo;ai rencontr\u00e9 un probl\u00e8me avec mon menu. Ce menu est pr\u00e9sent sous forme de ListActivity (comprenant une ListView), \u00e9tait tri\u00e9 selon un ordre alphab\u00e9tique qui est susceptible de changer puisque l&rsquo;application peut-\u00eatre traduite.<\/p>\n<p>Au d\u00e9but, j&rsquo;ai essay\u00e9 diverses m\u00e9thodes, mais les id de position \u00e9tant perdus&#8230; pas moyen de savoir \u00e0 quoi correspond quoi.<\/p>\n<p>J&rsquo;ai donc du trouver <a href=\"http:\/\/forum.frandroid.com\/forum\/viewtopic.php?id=15727\" target=\"_blank\">une solution<\/a>, solution que je vous pr\u00e9sente.<\/p>\n<h2>But<\/h2>\n<p>Le but est de cr\u00e9er un menu sous forme de liste (ListView) dont chaque \u00e9l\u00e9ment est cliquable et permet de r\u00e9cup\u00e9rer l&rsquo;id du clic. Cet id servant \u00e0 lancer une autre Activity, par exemple.<\/p>\n<h2>Exemple<\/h2>\n<p>Tout d&rsquo;abord la classe Menu :<\/p>\n<pre lang=\"java\">package org.android.bbox;\r\n\r\nimport java.util.Comparator;\r\n\r\npublic class Menu\r\n{\r\n\tprivate int id;\r\n\tprivate String label;\r\n\r\n\tpublic Menu(int id, String label)\r\n\t{\r\n\t\tthis.id = id;\r\n\t\tthis.label = label;\r\n\t}\r\n\r\n\tpublic String getLabel()\r\n\t{\r\n\t\treturn this.label;\r\n\t}\r\n\r\n\tpublic int getId()\r\n\t{\r\n\t\treturn this.id;\r\n\t}\r\n\r\n\tpublic static Menu[] factory(String[] menus)\r\n\t{\r\n\t\tMenu[] menu = new Menu[menus.length];\r\n\t\tfor(int i = 0; i &lt; menus.length; i++)\r\n\t\t{\r\n\t\t\tmenu[ i ] = new Menu(i, menus[ i ]);\r\n\t\t}\r\n\t\treturn menu;\r\n\t}\r\n\r\n\tpublic static Comparator getComparator()\r\n\t{\r\n\t\treturn new Comparator(){\r\n\t\t\t@Override\r\n\t\t\tpublic int compare(Menu m1, Menu m2)\r\n\t\t\t{\r\n\t\t\t\treturn m1.getLabel().compareTo(m2.getLabel());\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n\r\n\tpublic String toString()\r\n\t{\r\n\t\treturn this.getLabel();\r\n\t}\r\n}\r\n<\/pre>\n<p>Et la classe de l&rsquo;activit\u00e9 :<\/p>\n<pre lang=\"java\">\/\/ ...\r\n\tpublic void onCreate(Bundle savedInstanceState)\r\n\t{\r\n\t\t\/\/...\r\n\t\tMenu[] m = Menu.factory(getResources().getStringArray(R.array.main_list_array));\/\/r\u00e9cup\u00e9ration d'un tableau de string et cr\u00e9ation d'un tableau de Menu\r\n\t\tArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, m);\/\/cr\u00e9ation de l'adaptateur permettant l'affichage\r\n\t\tadapter.sort(Menu.getComparator());\/\/tri du menu\r\n\t\tListView myList = (ListView) findViewById(android.R.id.list);\r\n\t\tmyList.setAdapter(adapter);\/\/ajotu du menu \u00e0 la ListView\r\n\t\tmyList.setOnItemClickListener(this);\r\n\t\t\/\/...\r\n\t}\r\n\r\n\t@Override\r\n\tpublic void onItemClick(AdapterView parent, View view, int position, long id)\r\n\t{\r\n\t\tSystem.out.print(position);\r\n\t\tSystem.out.print(\" | \");\r\n\t\tSystem.out.print(parent.getItemAtPosition(position));\r\n\t\tSystem.out.print(\" | \");\r\n\t\tSystem.out.print(parent.getItemAtPosition(position).getClass());\r\n\t\tSystem.out.print(\" | \");\r\n\t\tSystem.out.print(((Menu)parent.getItemAtPosition(position)).getId());\r\n\t\tSystem.out.print(\" | \");\r\n\t\tSystem.out.println(id);\r\n\t\t\/\/...\r\n\t}\r\n\/\/ ...\r\n<\/pre>\n<p><strong>Remarque<\/strong> : la m\u00e9thode toString permet l&rsquo;affichage de l&rsquo;\u00e9l\u00e9ment dans la liste.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Menu ListView dans une ListActivity, tri\u00e9 selon un ordre alphab\u00e9tique. R\u00e9cup\u00e9ration de l&rsquo;\u00e9l\u00e9ment cliqu\u00e9&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[9],"tags":[102,24,109,28],"class_list":["post-312","post","type-post","status-publish","format-standard","hentry","category-dev","tag-android","tag-programmation","tag-projet","tag-trucs-et-astuces"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/posts\/312","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/comments?post=312"}],"version-history":[{"count":3,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/posts\/312\/revisions"}],"predecessor-version":[{"id":316,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/posts\/312\/revisions\/316"}],"wp:attachment":[{"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/media?parent=312"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/categories?post=312"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/tags?post=312"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}