Aller au contenu

[DEBUTANT] Appli de liste de courses


Invité

Recommended Posts

Bonjour à tous,

Je suis étudiant en Informatique, je possède le Samsung Galaxy.

Je voudrais me lancer dans le développement Android en commençant par une application simple.

J'aimerais faire une appli qui permette de faire sa liste des courses et de cocher les articles lorsqu'ils sont dans le caddie.

(avec après, la possibilité de trier les articles par catégorie (fruits, legumes, conserves, poisson, viande, livres, boissons) pour gagner du temps dans le supermarché. :)

J'ai le livre "L'art du développement android", j'ai commencé à le lire, mais j'ai du mal à bien comprendre le fonctionnement de certains éléments. :(

D'après vous :

quelle est la méthode de stockage la plus adaptée à mon idée d'appli ? (fichier, base SQLite ?)

merci :lol:

Lien vers le commentaire
Partager sur d’autres sites

Je pense que d'un point de vue général les fichiers à plat sont vraiment réservés à de petits volumes de données très simple ou à du paramétrage.

La base de données est à envisager le plus tôt possible même si ton application te semble modeste. Tu seras bien moins embêté concernant son évolution.

Lien vers le commentaire
Partager sur d’autres sites

merci à vous.

J'ai essayé de commencer hier soir et aujourd'hui, mais j'arrive à rien .... :mad:

dans le cours, il est question de "setListAdapter" et "getListView"... et quand je veux les utiliser, eclipse me dit que ces methodes ne sont pas implémentées ....

j'aimerais faire une Activity qui contienne la liste des courses (elle serait vide au début)

on pourrait ajouter des articles à cette liste en utilisant un Menu d'options (OptionsMenu) avec un choix "ajouter" par exemple.

(et je comprend pas comment faire ... :mad: )

pouvez vous m'expliquer s'il vous plait ? :| merci

Lien vers le commentaire
Partager sur d’autres sites

heu :/ on m'a conseillé SQLite ...

mais quelle est la différence avec un Provider ?

EDIT : je commence de zero ... c'est pour moi un nouveau monde ...

Modifié par Goten44
Lien vers le commentaire
Partager sur d’autres sites

merci à vous.

J'ai essayé de commencer hier soir et aujourd'hui, mais j'arrive à rien .... :mad:

dans le cours, il est question de "setListAdapter" et "getListView"... et quand je veux les utiliser, eclipse me dit que ces methodes ne sont pas implémentées ....

j'aimerais faire une Activity qui contienne la liste des courses (elle serait vide au début)

on pourrait ajouter des articles à cette liste en utilisant un Menu d'options (OptionsMenu) avec un choix "ajouter" par exemple.

(et je comprend pas comment faire ... :mad: )

pouvez vous m'expliquer s'il vous plait ? :| merci

Dans ton livre, le setListAdapter permet de faire appel à sa propre liste. Car en Standard la liste ne comprend que des String , int ou autres Type , or si tu veux faire une liste avec plus d'informations par lignes tu dois créer une liste dite "customisée".

En gros tu dois faire une classe qui étend "BaseAdapter" et surcharger les méthodes héritées, notamment la plus importante est la méthode getView(int position,View convertView, ViewGroup parent).

J'espère que c'est assez clair et que je n'ai pas dis de bétises.

Lien vers le commentaire
Partager sur d’autres sites

merci pour ton explication ... c'est encore un peu flou pour moi ...

donc si je commence par faire une liste de courses avec juste le nom des articles (des String ) je n'ai pas besoin de ces fonctions...

et comment faire pour ajouter un article à ma liste. :|

String[] items={};

pour obtenir par exemple :

String[] items={"tomates"};

merci !!

EDIT :

J'ai repris le code du début ...

J'ai à peu près compris le fonctionnement des OPTION MENU

et un peu celui des CONTEXT MENU (mais j'ai pas pu le tester car j'arrive pas a afficher une liste)

Voila mon code.

Les fonctions qui me posent problème sont en commentaire dans la méthode "onCreate"

(et j'ai pourtant fait "import android.widget.BaseAdapter;" ) :|

package com.test;

import android.app.Activity;
import android.os.Bundle;
import android.app.ListActivity;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;



public class main extends Activity {
   /** Called when the activity is first created. */
   TextView selection;
   String[] article={"lorem", "ipsum", "dolor", "sit", "amet",
                   "consectetuer", "adipiscing", "elit", "morbi", "vel",
                   "ligula", "vitae", "arcu", "aliquet", "mollis",
                   "etiam", "vel", "erat", "placerat", "ante",
                   "porttitor", "sodales", "pellentesque", "augue", "purus"};
   public static final int ONE_ID = Menu.FIRST+1;
   public static final int TWO_ID = Menu.FIRST+2;
   public static final int THREE_ID = Menu.FIRST+3;
   public static final int FOUR_ID = Menu.FIRST+4;
   public static final int FIVE_ID = Menu.FIRST+5;


   @Override
   public void onCreate(Bundle icicle) 
   {
       super.onCreate(icicle);
       setContentView(R.layout.main);
       // setListAdapter(new ArrayAdapter(this,android.R.layout.simple_list_item_1, items));
       selection=(TextView)findViewById(R.id.selection);
       // registerForContextMenu(getListView());
   }


   public void onListItemClick(ListView parent, View v, int position, long id) 
   {
       selection.setText(article[position]);
   }

   @Override
   public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) 
   {
       RemplirContextMenu(menu);
   }

   @Override
   public boolean onCreateOptionsMenu(Menu menu) 
   {
       RemplirOptionMenu(menu);
       return(super.onCreateOptionsMenu(menu));
   }

   @Override
   public boolean onOptionsItemSelected(MenuItem item) 
   {
       return(applyMenuChoice(item) ||
       super.onOptionsItemSelected(item));
   }

   @Override
   public boolean onContextItemSelected(MenuItem item) 
   {
       return(applyMenuChoice(item) ||
       super.onContextItemSelected(item));
   }

   //----------------------------------------------
   // FONCTIONS PERSO
   //----------------------------------------------
   private void RemplirOptionMenu(Menu menu) 
   {
       menu.add(Menu.NONE, ONE_ID, Menu.NONE, "Ajouter");
       menu.add(Menu.NONE, TWO_ID, Menu.NONE, "Autre");
       menu.add(Menu.NONE, THREE_ID, Menu.NONE, "Autre");
       menu.add(Menu.NONE, FOUR_ID, Menu.NONE, "Autre");
   }
   private void RemplirContextMenu(Menu menu) 
   {
       menu.add(Menu.NONE, ONE_ID, Menu.NONE, "Supprimer");
       menu.add(Menu.NONE, TWO_ID, Menu.NONE, "Modifier");
       menu.add(Menu.NONE, THREE_ID, Menu.NONE, "Autre");
       menu.add(Menu.NONE, FOUR_ID, Menu.NONE, "Autre");
   }

   private boolean applyMenuChoice(MenuItem item) 
   {
       return(false);
   }

}

Modifié par Goten44
Lien vers le commentaire
Partager sur d’autres sites

Vous embetez pas ... j'ai trouvé pourquoi ca ne marchait pas ...

je n'avais pas étendu la bonne classe .... :| :| :|

donc, maintenant : je découvre , j'expérimente ... :)

EDIT :

Voila ce que j'ai fait.

Il y a une liste avec un menu OPTION, et un menu CONTEXT sur chaque élément.

androidgaetan.png

Pour ma liste de courses, je vais devoir faire une classe ARTICLE ... ?

et chaque élément de ma liste sera un objet ARTICLE ? (oui ... je débute aussi en POO :| )

Modifié par Goten44
Lien vers le commentaire
Partager sur d’autres sites

Vous embetez pas ... j'ai trouvé pourquoi ca ne marchait pas ...

je n'avais pas étendu la bonne classe .... :| :| :|

donc, maintenant : je découvre , j'expérimente ... :)

EDIT :

Voila ce que j'ai fait.

Il y a une liste avec un menu OPTION, et un menu CONTEXT sur chaque élément.

androidgaetan.png

Pour ma liste de courses, je vais devoir faire une classe ARTICLE ... ?

et chaque élément de ma liste sera un objet ARTICLE ? (oui ... je débute aussi en POO :| )

Oui par exemple tu crée une classe Article qui permet d'avoir la description d'un article (Son nom, description etc...) et dans ta classe Main il faudra donc remplacer :

setListAdapter(new ArrayAdapter(this,android.R.layout.simple_list_item_1, items));

par

setListAdapter(new ArticleListView(this));

Avec ArticleListeView qui est la classe qui étend BaseAdapter et dans cette classe il faut donc surcharger la méthode getView :

par exemple comme ceci :

public View getView(int position, View convertView, ViewGroup parent)

{

// TODO Auto-generated method stub

TextView tv;

if (convertView == null)

{

tv = (TextView) LayoutInflater.from(mContext).inflate(

android.R.layout.simple_expandable_list_item_1, parent, false);

}

else

{

tv = (TextView) convertView;

}

tv.setText(ARTICLES[position]); //ARTICLES est une Arraylist ou un Tableau d'Article (Article étant la classe donnant la

description d'un article : Son nom, description etc...)

return tv;

}

J'espère que c'est assez clair.

Lien vers le commentaire
Partager sur d’autres sites

Un grand merci à toi !!!

c'est super sympa de prendre le temps d'expliquer ;)

alors j'ai fait ma classe ARTICLE ... (je ne l'ai pas encore utilisé, car je joue encore avec des chaines de caractère)

J'ai fait ce que tu as dit en m'aidant du livre, j'ai réussi à traiter chaque ligne au cas par cas :D

mais j'ai pas encore utilisé CONVERT VIEW.

Donc c'est l'étape suivante dans le livre , donc je commence la lecture !

voila ce que j'ai fait :

// Création de l'ACTIVITY
   @Override
   public void onCreate(Bundle icicle) 
   {
       super.onCreate(icicle);
       setContentView(R.layout.main);
       setListAdapter(new IconicAdapter(this));
       selection=(TextView)findViewById(R.id.selection);
       registerForContextMenu(getListView());

       //article patate = new article("patate", "legume", 1 );

   }






   class IconicAdapter extends ArrayAdapter
   {
       Activity context;

       IconicAdapter(Activity context) {
           super(context, R.layout.row, tab_article);
           this.context=context;
       }

       public View getView(int position, View convertView,
                                               ViewGroup parent) {
           LayoutInflater inflater=context.getLayoutInflater();
           View row=inflater.inflate(R.layout.row, null);
           TextView label=(TextView)row.findViewById(R.id.label);

           label.setText(tab_article[position]);

           if (tab_article[position].length()>4) {
               ImageView icon=(ImageView)row.findViewById(R.id.icon);

               icon.setImageResource(R.drawable.delete);
           }    

           return(row);
       }
   }

j'ai laissé le code du livre , histoire de comprendre et de faire fonctionner le code. :)

donc par defaut j'ai une icone verte dans le IMAGE VIEW et si la STRING.length fait plus que 4 alors c'est une image "delete" avec une croix rouge.

Lien vers le commentaire
Partager sur d’autres sites

J'aimerais mettre de côté la gestion de la liste et mettre en place l'ajout (et ensuite la suppression) d'éléments dans la liste...

J'ai fait un OPTION MENU avec une case AJOUTER ...

Comment feriez vous pour faire le champ de saisie d'un article ?

moi je pensais faire comme dans ASTRO lorsqu'on renomme un fichier :

un champ texte et OK et CANCEL dans une Face Box (sorte de popup blanche)

mais dans la documentation android je trouve pas comment faire ...

merci ;)

Lien vers le commentaire
Partager sur d’autres sites

J'aimerais mettre de côté la gestion de la liste et mettre en place l'ajout (et ensuite la suppression) d'éléments dans la liste...

J'ai fait un OPTION MENU avec une case AJOUTER ...

Comment feriez vous pour faire le champ de saisie d'un article ?

moi je pensais faire comme dans ASTRO lorsqu'on renomme un fichier :

un champ texte et OK et CANCEL dans une Face Box (sorte de popup blanche)

mais dans la documentation android je trouve pas comment faire ...

merci ;)

Pour faire un popup , il faut faire appel à la classe Dialog voici un exemple :

créer un fichier xml :

android:id="@+id/widget28"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical"

xmlns:android="http://schemas.android.com/apk/res/android"

>

android:id="@+id/nameMessage"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="Enter Name:"

>

android:id="@+id/nameEditText"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:textSize="18sp"

>

android:id="@+id/buttonLayout"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_gravity="center_horizontal"

>

android:id="@+id/okButton"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="OK"

>

android:id="@+id/cancelButton"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Cancel"

>

Ensuite

Creer sa classe qui étend la classe Dialog et qui implémente la classe OnclickListener pour gérer le clique de souris sur les boutons OK et annuler

class MyDialog extends Dialog implements OnClickListener {

private Button okButton;

private Button cancelButton;

private EditText nameEditText;

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.mydialog); // <----- ICI on fait appel au fichier xml créé précédemment.

okButton = (Button) findViewById(R.id.okButton);

cancelButton = (Button) findViewById(R.id.cancelButton);

nameEditText = (EditText) findViewById(R.id.nameEditText);

//Ajout de listener sur les boutons pour interagir avec ces boutons

okButton.setOnClickListener(this);

cancelButton.setOnClickListener(this);

}

public void onClick(View view)

{

switch (view.getId())

{

case R.id.okButton:

dismiss();

break;

case R.id.cancelButton:

cancel();

break;

}

}

}

puis dans l'Activity on lance le popup de cette façon :

MyDialog d = new MyDialog(context);

d.show();

Puis ensuite si tu veux tu peux ajouter d'autre fonctions à ta classe Mydialog pour ajouter un titre par exemple etc...

J'espère que c'est assez clair.

Lien vers le commentaire
Partager sur d’autres sites

:D un grand MERCI !!!

super sympa !

Je vais essayer d'implémenter tout ca demain ;)

et dans un "Dialog", on peut mettre ce qu'on veux ... ? (comme un 2eme champ de saisie par exemple)

Merci encore et passe une bonne soirée :)

Lien vers le commentaire
Partager sur d’autres sites

:D un grand MERCI !!!

super sympa !

Je vais essayer d'implémenter tout ca demain ;)

et dans un "Dialog", on peut mettre ce qu'on veux ... ? (comme un 2eme champ de saisie par exemple)

Merci encore et passe une bonne soirée :)

De rien.

Oui bien sur, tu peux même mettre une liste dans un dialog.

Bonne soirée et bon courage pour ta Liste de course, tiens nous informé de l'avancement de ton projet.

Lien vers le commentaire
Partager sur d’autres sites

Pas de problème, je vous tiens au courant de l'avancement.

Et quand elle commencera à être fonctionnelle, je partagerai l'appli, si ca en intéresse quelques uns :)

Lien vers le commentaire
Partager sur d’autres sites

heu , j'ai essayé d'utiliser ton code ...

mais dans ma classe MyDialog, il me dit qu'il n'y a pas de contructeur.

et dans mon activity principale (celle qui lance le dialog) il ne connait pas le "context" qui est là :

(il n'existe pas dans mon activity :(

puis dans l'Activity on lance le popup de cette façon :


MyDialog d = new MyDialog(context);
d.show();

comment faire s'il vous plait ? :|

Modifié par Goten44
Lien vers le commentaire
Partager sur d’autres sites

heu , j'ai essayé d'utiliser ton code ...

mais dans ma classe MyDialog, il me dit qu'il n'y a pas de contructeur.

et dans mon activity principale (celle qui lance le dialog) il ne connait pas le "context" qui est là :

(il n'existe pas dans mon activity :(

puis dans l'Activity on lance le popup de cette façon :


MyDialog d = new MyDialog(context);
d.show();

comment faire s'il vous plait ? :|

Dans ta classe MyDialog tu dois avoir un contructeur comme ceci :

Public MyDialog(Context context)

{

this.context = context;

}

et une variable context de type Context déclarée juste avant le constructeur.

Puis dans l'activity où tu appel ta classe MyDialog ,

1/ Soit tu crée une variable de type Activity s'appelant par exemple mContext et que tu l'initialise avec "this" de cette façon :

private Activity mContext = this;

puis tu appel ta classe MyDialog de cette façon :

MyDialog d = new MyDialog(mContex); //mContext est la variable créé juste au dessus

d.show();

2/ Soit tu fait appel à MyDialog de cette façon :

MyDialog d = new MyDialog(this);

d.show();

En gros il y en a qui préfère mettre this directement et d'autre qui préfère stocker this dans une variable.

En gros This défini le context Actuel , donc ta classe MyDialog doit avoir un constructeur qui sait sur quel context travailler.

Voili voilou.

Modifié par slevin
Lien vers le commentaire
Partager sur d’autres sites

Merci ! :D

Je commence à bien comprendre !!

j'ai suivi tes explications et ca fonctionne. (il me reste quelques détails à régler)

donc le "context" représente une "activity" :)

Lien vers le commentaire
Partager sur d’autres sites

Merci ;) (c'est quand même grâce à toi :D )

maintenant il faut que je lise comment faire pour stocker ma liste dans une Base SQLite ...

je pense que ma liste devra lister le contenu de la Base de Données (BDD)

et que le dialog ajoutera une entrée dans la table de la BDD

c'est bien comme ca qu'il faut procéder ? :|

Lien vers le commentaire
Partager sur d’autres sites

Merci ;) (c'est quand même grâce à toi :D )

maintenant il faut que je lise comment faire pour stocker ma liste dans une Base SQLite ...

je pense que ma liste devra lister le contenu de la Base de Données (BDD)

et que le dialog ajoutera une entrée dans la table de la BDD

c'est bien comme ca qu'il faut procéder ? :|

Et bien ta liste devra lister non pas le contenu de ta base de données mais plutot liste une table particulière de ta BDD.

Par contre je n'ai pas encore utiliser SQLite donc je vais jeter un œil et je te tiens informé.

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...