Invité Posté(e) 20 janvier 2010 Share Posté(e) 20 janvier 2010 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: Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
feust Posté(e) 20 janvier 2010 Share Posté(e) 20 janvier 2010 SQLIte je pense que sa serai le mieu Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Androc Posté(e) 20 janvier 2010 Share Posté(e) 20 janvier 2010 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. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Invité Posté(e) 21 janvier 2010 Share Posté(e) 21 janvier 2010 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 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
eden91940 Posté(e) 21 janvier 2010 Share Posté(e) 21 janvier 2010 provider ou sqllite Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Invité Posté(e) 21 janvier 2010 Share Posté(e) 21 janvier 2010 (modifié) 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é 21 janvier 2010 par Goten44 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
slevin Posté(e) 21 janvier 2010 Share Posté(e) 21 janvier 2010 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. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Invité Posté(e) 22 janvier 2010 Share Posté(e) 22 janvier 2010 (modifié) 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é 22 janvier 2010 par Goten44 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Invité Posté(e) 22 janvier 2010 Share Posté(e) 22 janvier 2010 (modifié) 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. 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é 22 janvier 2010 par Goten44 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
slevin Posté(e) 22 janvier 2010 Share Posté(e) 22 janvier 2010 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. 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. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Invité Posté(e) 22 janvier 2010 Share Posté(e) 22 janvier 2010 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. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Invité Posté(e) 22 janvier 2010 Share Posté(e) 22 janvier 2010 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 ;) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
slevin Posté(e) 22 janvier 2010 Share Posté(e) 22 janvier 2010 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. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Invité Posté(e) 22 janvier 2010 Share Posté(e) 22 janvier 2010 :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 :) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
slevin Posté(e) 22 janvier 2010 Share Posté(e) 22 janvier 2010 :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. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Invité Posté(e) 23 janvier 2010 Share Posté(e) 23 janvier 2010 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 :) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Invité Posté(e) 23 janvier 2010 Share Posté(e) 23 janvier 2010 (modifié) 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é 23 janvier 2010 par Goten44 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
slevin Posté(e) 23 janvier 2010 Share Posté(e) 23 janvier 2010 (modifié) 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é 23 janvier 2010 par slevin Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Invité Posté(e) 23 janvier 2010 Share Posté(e) 23 janvier 2010 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" :) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
slevin Posté(e) 23 janvier 2010 Share Posté(e) 23 janvier 2010 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" :) Oui. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Invité Posté(e) 23 janvier 2010 Share Posté(e) 23 janvier 2010 voila le résultat : Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
slevin Posté(e) 23 janvier 2010 Share Posté(e) 23 janvier 2010 Bien joué. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Invité Posté(e) 23 janvier 2010 Share Posté(e) 23 janvier 2010 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 ? :| Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
slevin Posté(e) 23 janvier 2010 Share Posté(e) 23 janvier 2010 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é. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Invité Posté(e) 23 janvier 2010 Share Posté(e) 23 janvier 2010 heu oui j'ai dit une bêtise ... pour la liste ... ^^ merci beaucoup, je vais aussi chercher... ;) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.