Dans mon post précédent j’ai affiché la liste des recettes enregistrées ici, dans mon post d’aujourd’hui je vais afficher le détail d’une recette sélectionnée sur le click de ma liste (nom de la recette et la recette). Je vais d’abord créer le xml de ma page qui va me servir à afficher les infos de la recette sélectionnée.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:layoutAnimation="@anim/layout_bottom_to_top_slide" > <TextView android:id="@+id/text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Nom de la recette" /> <TextView android:id="@+id/textrecette" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="" /> <TextView android:id="@+id/text2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="La recette" /> <TextView android:id="@+id/textlarecette" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="" /> </LinearLayout> |
Pour récupérer l’identifiant de chaque recette je vais modifier ma méthode renvoi_liste_recette de ma classe BDAcess, en créant un tableau de retour au rang 0 je renvoie le nom des recettes et au rang 1 la liste des identifiants
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | public ArrayList[] renvoi_liste_recette(){
String[] aTableCollonne=new String[] {"nom_larecette","id_larecette"};
Cursor objCursor = mDb.query(RECETTE_TABLE,aTableCollonne,null,null,null,null,null,null);
int iPostNomchaine = objCursor.getColumnIndex("nom_larecette");
int iPostId = objCursor.getColumnIndex("id_larecette");
int itotal = objCursor.getCount();
ArrayList<String> aTableRetourNom = new ArrayList<String>();
ArrayList<String> aTableRetourId = new ArrayList<String>();
objCursor.moveToFirst();
ArrayList[] aTableRetour = new ArrayList[2];
/* Check if our result was valid. */
if (objCursor != null) {
if (objCursor.isFirst()) {
int i = 0;
do {
i++;
String resultsring = objCursor.getString(iPostNomchaine);
String resultId = objCursor.getString(iPostId);
aTableRetourNom.add(resultsring);
aTableRetourId.add(resultId);
objCursor.moveToNext();
}while(!objCursor.isLast());
}
}
aTableRetour[0]=aTableRetourNom;
aTableRetour[1]=aTableRetourId;
return aTableRetour;//tableau de retour rang 0 le nom des recettes rang 1 id des recettes
} |
Toujours dans ma classe BDAccess je vais rajouter une méthode info_recette (qui renvoie les informations sur une recette grâce à son identifiant) en passant par argument l’identifiant de la recette
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public String[] info_recette(String id_recette){
String[] aTableauRetour = new String[2];
String[] aTableCollonne=new String[] {"nom_larecette","id_larecette","recette_larecette"};
String sFiltre="id_larecette='"+id_recette+"'";
Cursor objCursor = mDb.query(RECETTE_TABLE,aTableCollonne,sFiltre,null,null,null,null,null);
int iPostNomchaine = objCursor.getColumnIndex("nom_larecette");
int iPostRecette = objCursor.getColumnIndex("recette_larecette");
objCursor.moveToFirst();
String resultNomRecette = objCursor.getString(iPostNomchaine);
String resultLaRecette = objCursor.getString(iPostRecette);
aTableauRetour[0]=resultNomRecette;
aTableauRetour[1]=resultLaRecette;
return aTableauRetour;
} |
Dans ma classe principale je vais implémenter deux classes AdapterView.OnItemClickListener, View.OnClickListener donc l’en tête de ma classe principale donne donc
public class TestRecette extends Activity implements AdapterView.OnItemClickListener, View.OnClickListener{…
je rajoute donc deux méthodes dans ma classe principale onItemClick et onClick, la méthode qui m’interesse ici c’est onItemClick c’est elle qui est appelée quand il y a un click sur ma liste de recette
1 2 3 4 5 6 7 8 9 10 11 12 13 | public void onItemClick(AdapterView parent, View v, int position, long id) {
setContentView(R.layout.larecette);//on appelle notre xml
final TextView nomrecette = (TextView) findViewById(R.id.textrecette);
final TextView larecette = (TextView) findViewById(R.id.textlarecette);
ArrayList atableautmp = this.aTableauResult[1];
objBd.open();
String idRecette = (String) atableautmp.get(position);
String[] aTableauInfoRecette = objBd.info_recette(idRecette);
nomrecette.setText(aTableauInfoRecette[0]);//affichage du nom de la recette
larecette.setText(aTableauInfoRecette[1]);// affichage de la recette
objBd.close();
} |
n’oubliez pas d’importer les classes
import android.app.*;
import android.os.Bundle;
import android.view.*;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.view.View.OnClickListener;
code source ici
Il est temps de mettre à profit les tutoriels d’Android France:
Passez à la vitesse supérieure et investissez quelques dizaines d’euros pour acquérir les connaissances qui vous feront gagner de l’argent avec vos applications rendez-vous sur notre boutique Android-france pour ces formations en vidéo


















02 septembre 2009 à 14 h 34 min
Dans les variables de la classe principale ajouter,
“private ArrayList[] aTableauResult;”
03 janvier 2010 à 16 h 04 min
Bonjour à tous (et bonne année).
Bon encore merci pour tous ce tuto mais j’ai 2 problème.
Le premier est que je me retrouve avec une erreur sur le code :
Recette.java :
final ArrayAdapter adapter = new ArrayAdapter(this,
android.R.layout.simple_list_item_1,objBd.renvoi_liste_recette());
Si j’enleve les String je n’ai plus l’erreur mais je retrouve avec une liste composé de 2 éléments (les nom et les id).
Mon second soucis est qu’il est impossible de téléchager le code source car le site ou ils ont été enregistré n’est plus accessible.
Merci pour votre aide et bonne fin de week end.
Blubsy
05 janvier 2010 à 15 h 28 min
@busy le lien est rétabli
13 janvier 2010 à 14 h 21 min
Bonjour à tous,
Est-il possible de récupérer la base de donnée sous format txt ou db3 ?
J’aimerais afficher le contenu de mes tables grâce à SQL explorer mais je n’arrive pas à trouver l’emplacement de la base que nous avons créé.
Bonne journée,
21 mai 2010 à 17 h 53 min
j’ai téléchargé le code complet (de l’étape 5 jusqu’à l’étape
mais il ne fonctionne pas il m’affiche tjs fermeture soudaine de l’application: si je clic sur le nom de la recette que j’ai enregistré il ne m’affiche rien mais ilya fermeture soudaine de l’application c le meme cas si je clic sur les menus(Listes courses, rechercher).
et je trouve le meme pb dans l’étape 17
Pouver vous me répondre et merci
21 mai 2010 à 17 h 56 min
@Gabriel avez vous regardé dans votre debug logcat pour voir ce qui ne fonctionne pas
21 mai 2010 à 18 h 14 min
il m’affiche en rouge les erreurs suivants:
05-21 16:07:12.899: ERROR/vold(27): Error opening switch name path ‘/sys/class/switch/test2′ (No such file or directory)
05-21 16:07:12.899: ERROR/vold(27): Error bootstrapping switch ‘/sys/class/switch/test2′ (No such file or directory)
05-21 16:07:12.899: ERROR/vold(27): Error opening switch name path ‘/sys/class/switch/test’ (No such file or directory)
05-21 16:07:12.899: ERROR/vold(27): Error bootstrapping switch ‘/sys/class/switch/test’ (No such file or directory)
05-21 16:07:30.668: ERROR/BatteryService(58): usbOnlinePath not found
05-21 16:07:30.668: ERROR/BatteryService(58): batteryVoltagePath not found
05-21 16:07:30.668: ERROR/BatteryService(58): batteryTemperaturePath not found
05-21 16:07:30.709: ERROR/SurfaceFlinger(58): Couldn’t open /sys/power/wait_for_fb_sleep or /sys/power/wait_for_fb_wake
05-21 16:07:37.348: ERROR/AndroidRuntime(76): ERROR: thread attach failed
05-21 16:07:41.848: ERROR/EventHub(58): could not get driver version for /dev/input/mouse0, Not a typewriter
05-21 16:07:41.848: ERROR/EventHub(58): could not get driver version for /dev/input/mice, Not a typewriter
05-21 16:07:42.178: ERROR/System(58): Failure starting core service
05-21 16:07:42.178: ERROR/System(58): java.lang.SecurityException
05-21 16:07:42.178: ERROR/System(58): at android.os.BinderProxy.transact(Native Method)
05-21 16:07:42.178: ERROR/System(58): at android.os.ServiceManagerProxy.addService(ServiceManagerNative.java:146)
05-21 16:07:42.178: ERROR/System(58): at android.os.ServiceManager.addService(ServiceManager.java:72)
05-21 16:07:42.178: ERROR/System(58): at com.android.server.ServerThread.run(SystemServer.java:176)
05-21 16:07:42.199: ERROR/AndroidRuntime(58): Crash logging skipped, no checkin service
05-21 16:07:43.689: ERROR/AndroidRuntime(87): ERROR: thread attach failed
05-21 16:07:52.239: ERROR/MediaPlayerService(31): Couldn’t open fd for content://settings/system/notification_sound
05-21 16:07:52.288: ERROR/MediaPlayer(58): Unable to to create media player
05-21 16:07:58.389: ERROR/ActivityThread(123): Failed to find provider info for android.server.checkin
05-21 16:08:01.720: ERROR/ActivityThread(123): Failed to find provider info for android.server.checkin
05-21 16:08:01.899: ERROR/ActivityThread(123): Failed to find provider info for android.server.checkin
05-21 16:08:05.960: ERROR/AndroidRuntime(153): ERROR: thread attach failed
21 mai 2010 à 18 h 26 min
Pouver vous m’aider
21 mai 2010 à 18 h 33 min
Pourquoi vous me réponder pas .J’ai besoin de votre aide
et merci
22 mai 2010 à 10 h 57 min
Salut,
j’ai un pb au niveau de l’etape de recherche de la recette: si j’enregistre 2 recette défferntes lorsque je lance la recherche des recette: si la 1ere il m’affiche ses coordonnés correcte alors si la 2ème il m’affiche celles de la 1ère
avez vous une idée.
c urgent
24 mai 2010 à 11 h 29 min
Il n’y a quelqu’un qui peut m’aider