• Développez une application pour android étape 18 (Réorganisation de l’application)

    Publié le 12 juillet 2009 par Guy (GuyTouch)


    Dans cette étape 18 je vais réorganiser complétement l’application en plusieurs classes pour avoir une application structurée , et également utiliser les appels aux activity du tuto <<Passer des variables entre Activity sous android>>. On aura donc une classe par action du menu, et chaque nouvelle action sera une classe. Ce qui nous donne donc:

    Page principale =>Planningrecette.java (plat du jour)
    Enregistrer une recette=>EnregRecette.java
    Génération planning => GenerationPlanning.java
    Liste des courses=>ListeCourses.java
    Voir le planning=>VoirPlanning.java
    Rechercher une recette=>RechercherRecette.java
    Setting et configuration=>Setting.java
    Affiche recette=>AfficheRecette.java

    Ma classe Planningrecette.java, la classe principale est allégée considérablement elle donne donc

    ?Download download.txt
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    
       public class Planningrecette extends Activity {
     
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
           //ma fenetre d'entre sur l'application a voir plutard a quoi ça vas ressemblé
           this.setContentView(R.layout.entrer);
        }      
     
    /** Called when the activity is first created. */
        @Override
     
       // création de mon nouveau menu
        public boolean onCreateOptionsMenu(Menu menu) {
            MenuInflater inflater = getMenuInflater();
            //inflater.inflate(R.menu.options_menu, menu);
            boolean result = super.onCreateOptionsMenu(menu);
            int i=0;
            //inflater.inflate(R.menu.menurepas, menu);
            SubMenu fileMenu = menu.addSubMenu(0,1,i,"Plat du jour");i++;
            SubMenu editMenu = menu.addSubMenu(0,2,i,"Enreg Recette");i++;
            SubMenu genplannMenu = menu.addSubMenu(0,6,i,"Gen planning");i++;
            SubMenu listeCouseMenu = menu.addSubMenu(0,3,i,"Liste courses");i++;
            SubMenu voirPlanningMenu = menu.addSubMenu(0,7,i,"Voir planning");i++;
            SubMenu rechecheMenu = menu.addSubMenu(0,4,i,"Rechercher");i++;
            SubMenu settingMenu = menu.addSubMenu(0,5,i,"setting");i++;
     
            return true;
        }
     
      //action sur les différents menu j'appel a chaque fois un nouveau Inten qui corespond à la classe
       public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
          //***************ouverture enregistrement recette***************
            case 2:
         		Intent defineIntent = new Intent(this,EnregRecette.class);
         		this.startActivity(defineIntent);
         		return true;
            case 5:
         		Intent defineIntent5 = new Intent(this,Setting.class);
         		this.startActivity(defineIntent5);
         		return true;
            case 4:
         		Intent defineIntent4 = new Intent(this,RechercherRecette.class);
         		this.startActivity(defineIntent4);
         		return true;
            case 24:
            	Intent defineIntent24 = new Intent(this,GenerationPlanning.class);
     			this.startActivity(defineIntent24);
     			return true;
            }
      return false;
    }
     
    }

    Il faut également déclarer tous les nouveaux “intent” dans le fichier AndroidManifest.xml

    ?Download download.txt
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="org.com.planningrecette"
          android:versionCode="1"
          android:versionName="1.0">
          <uses-permission android:name="android.permission.INTERNET" /> 
        <application android:icon="@drawable/icon" android:label="@string/app_name">
           <activity android:name=".EnregRecette" android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                        <category android:name="android.intent.category.DEFAULT" />
                   </intent-filter>
            </activity>
     
            <activity android:name="Setting" android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                        <category android:name="android.intent.category.DEFAULT" />
                   </intent-filter>
            </activity>
     
             <activity android:name=".RechercherRecette" android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                        <category android:name="android.intent.category.DEFAULT" />
                   </intent-filter>
            </activity>
     
             <activity android:name=".GenerationPlanning" android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                        <category android:name="android.intent.category.DEFAULT" />
                   </intent-filter>
            </activity>
     
            <activity android:name=".Planningrecette"
                      android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
        <uses-sdk android:minSdkVersion="3" />
    </manifest>

    La classe EnregRecette s’occupera elle d’enregistrer les recettes.

    public class EnregRecette extends Activity {
     
    	 private ListView mRecetteList;
    	 private  Context lecontext;
    	 private final ArrayList aTableauIngredient= new ArrayList();
    	 private final ArrayList aTableauIngredientaff= new ArrayList();
    	 private  BDAcces objBd=new BDAcces(this);;
    	/** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
             lecontext =this;
             this.setContentView(R.layout.main);
         	  Button btEnregRecette = (Button) findViewById(R.id.button);
     
         	   Button btEnregajcon = (Button) findViewById(R.id.ajcondiment);
     
         	 final TextView texthaut = (TextView) findViewById(R.id.entry);
         	 final TextView textbas = (TextView) findViewById(R.id.entry3);
     
         	 mRecetteList = (ListView) findViewById(android.R.id.list);
          	final ArrayAdapter adapter2 = new ArrayAdapter(getBaseContext(),
         	            android.R.layout.simple_list_item_1,aTableauIngredientaff);
          	mRecetteList.setAdapter(adapter2);
         	 //final TextView textmilieu = (TextView) findViewById(R.id.entry2);
     
          	//this.setContentView(R.layout.liste_recette);
     
         	btEnregRecette.setOnClickListener(new Button.OnClickListener() {
                 public void onClick(View v) {
                 	try{
                 	//textbas.setText(texthaut.getText());
                 	String sNomRecette = texthaut.getText().toString();
                 	String sContenuRecette = textbas.getText().toString();
                 	objBd.open();
                 	//texthaut.setText(objBd.renvoi_requete());
                 	long bresult = objBd.insertRecette(sNomRecette, sContenuRecette,aTableauIngredient);
                 	String resultsring = new Long(bresult).toString() ;
                 	textbas.setText(resultsring);
                 	//textmilieu.setText(sContenuRecette);
                 	objBd.close();
                 	}
                 	catch (Exception e) {
                 		textbas.setText("erreur "+e.getMessage());
    	               }
     
                 }
         	});
     
         	btEnregajcon.setOnClickListener(new Button.OnClickListener() {
                 public void onClick(View v) {
                 	//View v v.getContext()
                 	Myclassdialog dialog = new Myclassdialog(v.getContext(),
                 			new OnReadyListener());
                 	dialog.setTitle("Enregistrement ingredient");
                 	dialog.show();
     
                 }
         	});        	
     
        }
     
        private class OnReadyListener implements Myclassdialog.ReadyListener,
        AdapterView.OnItemClickListener, View.OnClickListener{ 
     
            public void ready(String sUnite,String sQuantite,String sIngredient) { 
     
            	String[] sNewtext=new String[]{sUnite,sQuantite,sIngredient};
     
            	String sNewtextaff="";
            	//tableau temporaire des informations
            	aTableauIngredient.add(sNewtext);
            	//tableau temporaire de l'affichage
            	aTableauIngredientaff.add(sQuantite+" "+sUnite+" "+sIngredient);
     
            	/*int iTailletab = aTableauIngredient.size();
     
            	for(int i=0;i adapter2 = new ArrayAdapter(getBaseContext(),
           	            android.R.layout.simple_list_item_1,aTableauIngredientaff);
            	mRecetteList.setAdapter(adapter2);
                mRecetteList.setOnItemClickListener(this);
     
            	//TextView textbastmp2 = (TextView) findViewById(R.id.entry2);
     
            	//textbastmp2.setText(sNewtextaff);
     
            }
            // action sur le clik sur un item de ma listview
            public void onItemClick(AdapterView parent, View v, int position, long id) {
            	//***********suppression des informations dans mon tableau********
            	aTableauIngredientaff.remove(position);
            	aTableauIngredient.remove(position);
            	mRecetteList = (ListView) findViewById(android.R.id.list);
            	final ArrayAdapter adapter2 = new ArrayAdapter(getBaseContext(),
           	            android.R.layout.simple_list_item_1,aTableauIngredientaff);
            	mRecetteList.setAdapter(adapter2);
                mRecetteList.setOnItemClickListener(this);
     
            }
            public void onClick(View v) {
            	int u=0;
            }
     
       } 
     
    }

    La classe Setting.java, gestion de la configuration de notre application.

    public class Setting extends Activity{
     
    	 private  BDAcces objBd=new BDAcces(this);
    	 private final ArrayList aTableauIngredient= new ArrayList();
     
    	/** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
           setContentView(R.layout.setting);
           //setContentView(R.layout.autocomplete);
     		final TextView contenuText = (TextView) findViewById(R.id.contenu);
     
     		//**************action mise à jour bdd**********************
     		Button btupdatebd = (Button) findViewById(R.id.btmisjour);
     		btupdatebd.setOnClickListener(new Button.OnClickListener() {
            	public void onClick(View v) {
            		objBd.open();
            		objBd.update_bdd();
            		objBd.close();
            		contenuText.setText("Mise à jour ok");
            	}
            	});    
     
     		Button btimportrecette = (Button) findViewById(R.id.btrecet);
     		btimportrecette.setOnClickListener(new Button.OnClickListener() {
            	public void onClick(View v) {
            		try{
            		objBd.open();
            		ArrayList listeRecette = objBd.renvoi_liste_recette_xml();
            		 String myString = "";
            		 for(int i=0; i

    la classe RechercherRecette.java permettant de rechercher une recette dans la base de données.

    public class RechercherRecette extends Activity implements
    AdapterView.OnItemClickListener, View.OnClickListener{
     
    	private  BDAcces objBd=new BDAcces(this);
    	private  ArrayList[] aTableauResult;
     
    	/** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //setContentView(R.layout.setting);
     		final TextView contenuText = (TextView) findViewById(R.id.contenu);
     		// on appelle le fichier xml autocomplete
     		setContentView(R.layout.autocomplete);
        	// ouverture de ma bas de donnée
        	objBd.open();
        	//récupération de la liste des recettes
        	this.aTableauResult= objBd.renvoi_liste_recette();
        	//création de la liste autocompletion
        	ArrayAdapter adapterII = new ArrayAdapter(this,
                    android.R.layout.simple_dropdown_item_1line,
                    this.aTableauResult[0]);
            AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.edit);
            textView.setAdapter(adapterII);
            // sur le click on appelle la page d'affichage du detail de la recette
            textView.setOnItemClickListener(this);
            objBd.close();
     
        }
    	public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) {
    		// TODO Auto-generated method stub
     
    	}
    	public void onClick(View v) {
    		// TODO Auto-generated method stub
     
    	}	
     
    }

    la classe GenerationPlanning.java permet de générer aléatoirement un planning en cours de développement et toutes les autres à venir.

    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+ 

  • Les Brèves