• Développez une application pour android etape 8 (Affichage d’une recette)

    Publié le 13 avril 2009 par Guy (GuyTouch)


    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


    Guy

    Co-fondateur du site Android france, senior lead developper, passionné de bière et de cigare cubain

    Twitter Google+ 

  • 11 Commentaires pour ce billet

    1. 1 - Vendetta dit:

      Dans les variables de la classe principale ajouter,
      “private ArrayList[] aTableauResult;”

    2. 2 - blubsy dit:

      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

    3. 3 - Guy dit:

      @busy le lien est rétabli

    4. 4 - p_13 dit:

      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,

    5. 5 - Gabriel dit:

      j’ai téléchargé le code complet (de l’étape 5 jusqu’à l’étape 8) 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

    6. 6 - Guy dit:

      @Gabriel avez vous regardé dans votre debug logcat pour voir ce qui ne fonctionne pas

    7. 7 - Gabriel dit:

      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

    8. 8 - Gabriel dit:

      Pouver vous m’aider

    9. 9 - Gabriel dit:

      Pourquoi vous me réponder pas .J’ai besoin de votre aide
      et merci

    10. 10 - SB-18 dit:

      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

    11. 11 - SB-18 dit:

      Il n’y a quelqu’un qui peut m’aider

  • Laissez un commentaire

  • Les Brèves