Sous-Programmes INTENTS

Rappel, il est préférable de placer dans une « class » toutes les fonctions qui sont utilisées plus d’une fois dans un programme.

Pour ce faire, il faut déclarer la class :

 package com.xxx;  
 import xxxx;  
 public class Utilxxx {  
      public Utilxxx (Context context){  
 ............  

Et l’utiliser :
Utilxxx.ma_fonction();

Pour appeler un sous-programme, on utilise la technologie des INTENTS :

1°) Dans le programme qui appel :
On écrit dans la partie du code qui appelle le sous programme (pour un appel avec passage de données en variable)

           Intent intent = new Intent(<<Activity-mére>>.this, <<Activity-fille>>.class);  
           intent.putExtra("var1",<<contenu-variable1>>);  
           startActivityForResult(intent,<<variable-de-type-“static final int”>>);  

Et on ajoute pour traiter les retours la fonction :

 @Override  
   protected void onActivityResult(int requestCode, int resultCode, Intent data) { int var1;   
  if (requestCode == <<variable-de-type-“static final int”>>)   
    { if (resultCode == RESULT_OK)   
       {if (data.hasExtra("returnSauv"))   
         {var1=data.getExtras().getInt("returnSauv");  
           Toast.makeText(this, "Mémoire = "+String.valueOf(memAnn),Toast.LENGTH_SHORT).show();  
          }  
       }  
     }  
   }  

2°) Dans le programme appelé :

 public class AfficDetail extends Activity {  
      private static int Var1;  
 @Override  
      protected void onCreate(Bundle savedInstanceState) {  
           super.onCreate(savedInstanceState);  
           setContentView(R.layout.<<layout>>);  
           Bundle extras = getIntent().getExtras();   
           Var1= extras.getInt("var1");  
 //--Traitement…  
 }  
 @Override  
 public void finish() {  
  // Prepare data intent   
  Intent data = new Intent();  
  data.putExtra("returnSauv", Var1);  
  // Activity finished ok, return the data  
  setResult(RESULT_OK, data);  
  super.finish();  
 }  
 }  

Pour un appel simple (sans passage de variable ni récupération de données) simplement écrire :

 Intent myIntent = new Intent(this, AddNewActivity.class);  
 startActivity(myIntent);   

3°) N’oubliez pas de modifier le fichier manifest de votre application

Insérez entre la balise </activity> de l’activité principale et avant la balise </application>

     <activity android:name=".<nom_de_l'activité>"  
          android:label="@string/app_name">  
        <intent-filter>  
         <action android:name="android.intent.action.DEFAULT" />  
        </intent-filter>  
     </activity>  

Remarque, tous les types de données peuvent être passées. Par contre pour les objets complexes (classes ou tableaux multidimentionnels,..) il faut utiliser la technique du « parce ». Sinon, il est possible et plus optimal de créer une base de données et de l’utiliser dans les activités.

http://www.javacodegeeks.com/2014/01/android-tutorial-two-methods-of-passing-object-by-intent-serializableparcelable.html

a) Ajouter dans la classe à « parcer » :

Les imports :

import android.os.Parcel;
import android.os.Parcelable;

Le type « parcelable » :

public class maClasse implements Parcelable{

Et le code suivant :

 ///// Parcelling  
 public maClasse(Parcel in){  
   String[] data = new String[3];  
   in.readStringArray(data);  
   this.id = data[0];  
   this.nom = data[1];  
   this.prenom = data[2];  
 }  
 @override  
 public int describeContents(){  
   return 0;  
 }  
 @Override  
 public void writeToParcel(Parcel dest, int flags) {  
   dest.writeStringArray(new String[] {this.id,  
                     this.nom,  
                     this.prenom});  
 }  
 public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {  
   public maClasse createFromParcel(Parcel in) {  
     return new maClasse(in);   
   }  
   public maClasse[] newArray(int size) {  
     return new maClasse[size];  
   }  
 };  

b) Passage de paramétre :

intent.putExtra("Objet_de_type_maClasse",Objet_de_type_maClasse);

c) Récupération dans l'activité réceptionniste :
  Bundle data = getIntent().getExtras();  
  maClasse objet_de_type_maClasse = data.getParcelable("Objet_de_type_maClasse"); 

4°) Pour un appel à partir d’une classe (exemple dans un phone Listner) :

       Intent delintent= new Intent(context, delNumber.class);  
       delintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
       ctx.startActivity(delintent);  

Avec ctx :

      public <Nom de la Classe>(Context ctx) {  
           this.ctx = ctx;  
           callStateListener = new CallStateListener();  
           outgoingReceiver = new OutgoingReceiver();  
      }  

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.

Articles récents
Commentaires récents
fatima dans Bienvenue !
AdminDroid dans Bienvenue !
fatima dans Bienvenue !
Archives
Catégories
%d blogueurs aiment cette page :