IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

La méthode OnClickListner


Sujet :

Android

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2014
    Messages : 21
    Points : 11
    Points
    11
    Par défaut La méthode OnClickListner
    Bonjour les amis,

    Donc voila je suis sur un projet d'application androïde qui est un lecteur de QR code personnalisé et au cours de mon chemin j'ai trouver un problème concernant l'ajout d'un simple bouton d'action en utilisons la méthode OnClickListner

    Fichier Manifest.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.man.test4"
          android:versionCode="1"
          android:versionName="1.0">
     
        <uses-permission android:name="android.permission.CAMERA"/>
        <uses-permission android:name="android.permission.CALL_PHONE" />
        <uses-feature android:name="android.hardware.camera" android:required="false"/>
        <uses-sdk android:minSdkVersion="8" />
     
        <application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
            <activity android:name="MainActivity"
                      android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
     
            <activity android:name="com.dm.zbar.android.scanner.ZBarScannerActivity"
                      android:screenOrientation="landscape"
                      android:label="@string/app_name" />
        </application>
    </manifest>

    Fichier main.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:padding="5dp"
        android:gravity="center"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <Button
            android:id="@+id/scan_btn"
            android:layout_height="wrap_content"
            android:layout_width="fill_parent"
            android:onClick="launchScanner"
            android:text="@string/scan" />
    </LinearLayout>
    Fichier source

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    package com.man.test4;
     
    import android.app.Activity;
    import android.content.Intent;
    import android.content.pm.PackageManager;
    import android.net.Uri;
    import android.os.Bundle;
    import android.text.TextUtils;
    import android.view.View;
    import android.widget.Toast;
     
     
    import com.dm.zbar.android.scanner.ZBarConstants;
    import com.dm.zbar.android.scanner.ZBarScannerActivity;
     
    import net.sourceforge.zbar.Symbol;
     
    public class MainActivity extends Activity {
     
        private static final int ZBAR_SCANNER_REQUEST = 0;
        private static final int ZBAR_QR_SCANNER_REQUEST = 1;
     
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
        }
     
        public void launchScanner(View v) {
            if (isCameraAvailable()) {
                Intent intent = new Intent(this, ZBarScannerActivity.class);
                startActivityForResult(intent, ZBAR_SCANNER_REQUEST);
            } else {
                Toast.makeText(this, "Rear Facing Camera Unavailable", Toast.LENGTH_SHORT).show();
            }
        }
     
    //    public void launchQRScanner(View v) {
    //        if (isCameraAvailable()) {
    //            Intent intent = new Intent(this, ZBarScannerActivity.class);
    //            intent.putExtra(ZBarConstants.SCAN_MODES, new int[]{Symbol.QRCODE});
    //            startActivityForResult(intent, ZBAR_SCANNER_REQUEST);
    //        } else {
    //            Toast.makeText(this, "Rear Facing Camera Unavailable", Toast.LENGTH_SHORT).show();
    //        }
    //    }
     
        public boolean isCameraAvailable() {
            PackageManager pm = getPackageManager();
            return pm.hasSystemFeature(PackageManager.FEATURE_CAMERA);
        }
     
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            switch (requestCode) {
                case ZBAR_SCANNER_REQUEST:
                case ZBAR_QR_SCANNER_REQUEST:
                    if (resultCode == RESULT_OK) {
                        //Toast.makeText(this, "Scan Result = " + data.getStringExtra(ZBarConstants.SCAN_RESULT), Toast.LENGTH_SHORT).show();
                        Intent callIntent = new Intent(Intent.ACTION_CALL);
                        callIntent.setData(Uri.parse("tel:"+data.getStringExtra(ZBarConstants.SCAN_RESULT).toString()));
                        callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
                        startActivity(callIntent);
     
                    } else if(resultCode == RESULT_CANCELED && data != null) {
                        String error = data.getStringExtra(ZBarConstants.ERROR_INFO);
                        if(!TextUtils.isEmpty(error)) {
                            Toast.makeText(this, error, Toast.LENGTH_SHORT).show();
                        }
                    }
                    break;
            }
        }
    }
    Donc mon but c'est de crée un bouton action nommé Options, qui renvoi a une autre activité, comment dois-je procéder a votre avis?

    En gros mon application ressemble a ca


    Et mon but c'est cela



    Et quand on clique dessous ca nous donne ca






    Merci et bonne journée a tous

  2. #2
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Je ne comprends pas ton problème.

    En lisant le code, je dirai que tu as un crash avec une erreur signifiant que la méthode launchScanner(View)n'existe pas. C'est normal puisque dans ton code elle s'appelle launchQRScanner(View). Il faut que le nom de la valeur onClick du XML corresponde au nom d'une méthode.

    Sinon, si tu veux rajouter un bouton... rajoutes-le dans le XML ? Puisque tu en as déjà un, où se trouve le souci ?
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2014
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    C'est ça le problème j'ai bout temps essayer d'en rajouter un dans le xml et qui fait le même fonctionnement que la méthode OnClickListner mais je ne suis pas arrivé a faire cliquer ce bouton qui donne sur une autre page.

  4. #4
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Ok et merci pour les compléments
    Personnellement, je n'aime pas passer par l'attribut onClick, trouvant que celui-ci améliore un peu la visibilité, mais rend la maintenance ou le refactoring plus complexe.

    Une autre méthode de faire faire une action est de la réaliser directement dans le code de ta classe.
    Dans ton onCreate, utilise la méthode findViewById(int) après le setContentView avec l'ID du bouton (qui devrait être R.id.scan_btn) et rajoute lui une action au toucher via View#setOnClickListener(View#OnClickListener). Ce listener sera une classe anonyme que tu créeras pour l'occasion, et son effet sera celui de ta méthode launchQRScanner.
    Tu peux aussi passer la classe courante en faisant en sorte qu'elle implémente l'interface View#OnClickListener.

    Pour rajouter un bouton, tu sembles déjà savoir le faire.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2014
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    j'ai utiliser cette methode mais ca ne marche pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    package com.man.test4;
     
    import android.app.Activity;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.widget.Button;
    import android.view.View;
    import android.view.View.OnClickListener;
     
    public class Main extends Activity {
     
    	Button options;
     
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
    		addListenerOnButton();
     
    	}
     
    	public void addListenerOnButton() {
     
    		final Context context = this;
     
     
    		options = (Button) findViewById(R.id.options);
     
    		mldc.setOnClickListener(new OnClickListener() 
    		{
     
     
    		options.setOnClickListener(new OnClickListener() 
    		{
     
    			@Override
    			public void onClick(View arg0) 
    			{
     
    			    Intent intent = new Intent(context, Options.class);
                                startActivity(intent);   
     
    			}
     
    		});
    			}
     
    		}
    et la classe anonyme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.Button;
     
    public class Options extends Activity {
     
    	Button options;
     
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.options);
     
     
    	}
     
    }
    Je sent que je fait quelque chose a travers, mais s'il te plait, peut tu me donner le code que j'ai poster modifier en incluant ce bouton si c'est pas trop demander.

  6. #6
    Membre éclairé
    Avatar de LeBzul
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 381
    Points : 832
    Points
    832
    Par défaut
    Ton code à l'air d'avoir un soucis à ce niveau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    mldc.setOnClickListener(new OnClickListener() 
    		{
    		options.setOnClickListener(new OnClickListener() 
    		{ ...
    Pourquoi tu as 2 onclick imbriqué ?
    "Quand la lune n'est pas là, la nuit mène une existence obscure"

  7. #7
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Je pense que tu devrais voir la base de la programmation et la base de la programmation d'interface avant de te mettre à développer pour Android. Je te suggère de mettre Android en stand-by le temps que tu comprennes les concepts de la programmation événementielle (mots clés) et que tu aies une bonne base en programmation.

    Pour ton problème, comme LeBzul l'a noté, ta syntaxe est strictement incorrect. Ton IDE doit d'ailleurs bien te le signaler (si tu en utilises un).

    Un exemple serait :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    monBouton.setOnClickListener(new View.OnClickListener() {
     
    	@Override
    	public void onClick(View view) {
    		Intent intent = new Intent(context, LaClasseCible.class);
    		startActivity(intent);
    	}
     
    }
    Mais je pense que ce code doit tapisser le web avec "android intent launch activity".
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  8. #8
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2014
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Hizin Voir le message
    Je pense que tu devrais voir la base de la programmation et la base de la programmation d'interface avant de te mettre à développer pour Android. Je te suggère de mettre Android en stand-by le temps que tu comprennes les concepts de la programmation événementielle (mots clés) et que tu aies une bonne base en programmation.

    Pour ton problème, comme LeBzul l'a noté, ta syntaxe est strictement incorrect. Ton IDE doit d'ailleurs bien te le signaler (si tu en utilises un).

    Un exemple serait :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    monBouton.setOnClickListener(new View.OnClickListener() {
     
    	@Override
    	public void onClick(View view) {
    		Intent intent = new Intent(context, LaClasseCible.class);
    		startActivity(intent);
    	}
     
    }
    Mais je pense que ce code doit tapisser le web avec "android intent launch activity".


    Monsieur Le Moderateur, je sais trés bien comment ca marche avec la programmation événementielle,
    Voici a code que j'ai utiliser pour mon autre application et ca fonctionne a merveille, mais le truc avec le code du lecteur QR code me fait pas mal baver.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    package com.example.go;
     
    import android.app.Activity;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.widget.Button;
    import android.view.View;
    import android.view.View.OnClickListener;
     
    public class SimplestButtonActivity extends Activity {
     
    	Button button1,button2;
     
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_simplest_button);
    		addListenerOnButton();
     
    	}
     
    	public void addListenerOnButton() {
     
    		final Context context = this;
     
    		button1 = (Button) findViewById(R.id.button1);
    		button2 = (Button) findViewById(R.id.button2);
     
    		button1.setOnClickListener(new OnClickListener() 
    		{
     
    			@Override
    			public void onClick(View v) 
    			{
     
    			    Intent intent = new Intent(context, main2.class);
                                startActivity(intent);   
     
    			}
     
    		});
    		button2.setOnClickListener(new OnClickListener() {
     
    			@Override
    			public void onClick(View arg0) {
     
    			    Intent intent = new Intent(context, main3.class);
                                startActivity(intent);   
    	}
    		});
     
    			}
     
    		}
    Pour que vous aurez une image complète de mon projet avec quoi je participe le 17 fevrier dans un concours je vous le joint tout entier.
    Fichiers attachés Fichiers attachés

  9. #9
    Membre éclairé
    Avatar de LeBzul
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 381
    Points : 832
    Points
    832
    Par défaut
    Ton code fonctionne bien, je clique sur option, je vais sur l'activité avec écrit "options".
    Mise à part le launchScanner qui ne fonctionne pas car il n'y a pas de méthode associé (comme dit plus haut) tout va bien ?
    "Quand la lune n'est pas là, la nuit mène une existence obscure"

  10. #10
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2014
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par LeBzul Voir le message
    Ton code fonctionne bien, je clique sur option, je vais sur l'activité avec écrit "options".
    Mise à part le launchScanner qui ne fonctionne pas car il n'y a pas de méthode associé (comme dit plus haut) tout va bien ?
    Pour moi c'est le contraire le launchScanner marche bien mais pas les autres boutons et je ne sais ou est le problème?

    Je vous joint mon application en apk pour l'essayer et voir ce qui ne va pas.
    Fichiers attachés Fichiers attachés

  11. #11
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Je suis désolé que tu prennes mal ce que j'ai écrit. Je ne comprends pas pourquoi d'ailleurs. Ton code montrait des lacunes claires au niveau des bases de la programmation, de la syntaxe et de l'événementielle. Partant de là, je t'ai simplement conseillé ce qui me semblait le plus juste.
    Je ne te connais ni d'Ève, ni d'Adam, je ne peux me baser que sur ce que je vois pour te conseiller au mieux à régler ton problème et t'aider.

    Histoire d'avancer, que signifie "ça marche pas" ? As-tu un crash ? Aucune action ? Une autre activité ? Le terminal s'éteint ?
    J'essaierai de tester l'APK dans la journée.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  12. #12
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2014
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Hizin Voir le message
    Je suis désolé que tu prennes mal ce que j'ai écrit. Je ne comprends pas pourquoi d'ailleurs. Ton code montrait des lacunes claires au niveau des bases de la programmation, de la syntaxe et de l'événementielle. Partant de là, je t'ai simplement conseillé ce qui me semblait le plus juste.
    Je ne te connais ni d'Ève, ni d'Adam, je ne peux me baser que sur ce que je vois pour te conseiller au mieux à régler ton problème et t'aider.

    Histoire d'avancer, que signifie "ça marche pas" ? As-tu un crash ? Aucune action ? Une autre activité ? Le terminal s'éteint ?
    J'essaierai de tester l'APK dans la journée.

    Non au contraire, c'est moi qui vous demande des excuses pour mon attitude, je crois que je me suis laisser aller a cause de ce problème que je n'arrive pas a résoudre ca fait plus de 15 jours et en même temps comme j'ai déjà mentionner auparavant j'ai un concours pour le 17 Février, donc encore une fois je vous présente tout mes excuses Monsieur Le Modérateur, si j'ai poster mon problème ici c'est bien pour apprendre des gents comme vous a qui je dois un grand respect.

    En ce qui concerne mon application, le problème c'est que quand j’appuie sur le bouton rouge ( scan) ça fonctionne a merveille, mais le soucis que j'ai concerne les autres boutons quand j’appuie dessus il n’y a aucune action alors que je crois avoir tout fait ( a mon avis ).

    J'ai poster toutes les informations a ma possession, c'est pour cela je vous pris de tout mon cœur que vous m'aidiez a résoudre ce problème qui me fait chavirer.

  13. #13
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Je viens d'installer ton APK. J'ai eu un peu peur tout de même avec la mention "service payants".

    Histoire d'illustrer pour les autres contributeurs : l'activité est composée d'un menu principal avec 5 boutons identiques et un autre permettant de lancer une reconnaissance via caméra.
    Aucun des 5 boutons ne fonctionne (i.e. : aucune réaction, pas de selector, rien), le bouton caméra fonctionne.

    Pourrais-tu, s'il te plaît, mettre le code complet de l'Activité principale ? Ainsi que le XML correspondant ? Je pense a deux-trois trucs, mais je préfère avoir le code avant de me prononcer.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  14. #14
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 129
    Points : 144
    Points
    144
    Par défaut
    Evite de mélanger ta vue et ton controller. En mettant un onClick dans le xml.

    Priviligie un .setOnClickListener

  15. #15
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2014
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Hizin Voir le message
    Je viens d'installer ton APK. J'ai eu un peu peur tout de même avec la mention "service payants".

    Histoire d'illustrer pour les autres contributeurs : l'activité est composée d'un menu principal avec 5 boutons identiques et un autre permettant de lancer une reconnaissance via caméra.
    Aucun des 5 boutons ne fonctionne (i.e. : aucune réaction, pas de selector, rien), le bouton caméra fonctionne.

    Pourrais-tu, s'il te plaît, mettre le code complet de l'Activité principale ? Ainsi que le XML correspondant ? Je pense a deux-trois trucs, mais je préfère avoir le code avant de me prononcer.
    Fichier main.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/RelativeLayout1"
        android:layout_width="fill_parent"
        android:background="@drawable/blue"
        android:layout_height="fill_parent"
     
        android:orientation="vertical"
        android:padding="5.0dip" >
     
        <Button
            android:id="@+id/options"
            android:layout_width="200dp"
            android:layout_height="70dp"
            android:layout_above="@id/scan_btn"
            android:layout_alignLeft="@+id/mldc"
            android:background="@drawable/blue1"
            android:text="@string/options" />
     
        <Button
            android:id="@+id/meco"
            android:layout_width="200dp"
            android:layout_height="70dp"
            android:layout_above="@+id/adf"
            android:layout_alignLeft="@+id/adf"
            android:background="@drawable/blue1"
            android:text="@string/meco" />
     
        <Button
            android:id="@+id/mcf"
            android:layout_width="200dp"
            android:layout_height="70dp"
            android:layout_above="@+id/meco"
            android:layout_alignLeft="@+id/mldc"
            android:background="@drawable/blue1"
            android:text="@string/mcf" />
     
        <Button
            android:id="@+id/mldc"
            android:layout_width="200dp"
            android:layout_height="70dp"
            android:layout_above="@+id/mcf"
            android:layout_centerHorizontal="true"
            android:background="@drawable/blue1"
            android:text="@string/mldc" />
     
        <Button
            android:id="@id/scan_btn"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:background="@drawable/scan"
            android:onClick="launchScanner"
            android:text="@string/scan" />
     
        <Button
            android:id="@+id/adf"
            android:layout_width="200dp"
            android:layout_height="70dp"
            android:layout_alignLeft="@+id/options"
            android:layout_centerVertical="true"
            android:background="@drawable/blue1"
            android:text="@string/adf" />
     
    </RelativeLayout>
    Main.java

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    package com.man.test4;
     
    import android.app.Activity;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.widget.Button;
    import android.view.View;
    import android.view.View.OnClickListener;
     
    public class Main extends Activity {
     
    	Button mldc,mcf,meco,adf,options;
     
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
     
    		addListenerOnButton();
     
    	}
     
    	public void addListenerOnButton() {
     
    		final Context context = this;
     
    		mldc = (Button) findViewById(R.id.mldc);
    		mcf = (Button) findViewById(R.id.mcf);
    		meco = (Button) findViewById(R.id.meco);
    		adf = (Button) findViewById(R.id.adf);
    		options = (Button) findViewById(R.id.options);
     
    		mldc.setOnClickListener(new View.OnClickListener() {
     
    			@Override
    			public void onClick(View view) {
     
    			    Intent intent = new Intent(context, Mldc.class);
                                startActivity(intent);   
     
    			}
     
    		});
    		mcf.setOnClickListener(new View.OnClickListener() {
     
    			@Override
    			public void onClick(View view) {
     
    			    Intent intent = new Intent(context, Mcf.class);
                                startActivity(intent);   
    	}
    		});
    		meco.setOnClickListener(new View.OnClickListener() {
     
    			@Override
    			public void onClick(View view) {
     
    			    Intent intent = new Intent(context, Meco.class);
                                startActivity(intent);   
     
    			}
     
    		});
    		adf.setOnClickListener(new View.OnClickListener() {
     
    			@Override
    			public void onClick(View view) {
     
    			    Intent intent = new Intent(context, adf.class);
                                startActivity(intent);   
     
    			}
     
    		});
    		options.setOnClickListener(new View.OnClickListener() {
     
    			@Override
    			public void onClick(View view) {
     
    			    Intent intent = new Intent(context, Options.class);
                                startActivity(intent);   
     
    			}
     
    		});
    			}
     
    		}
    Si vous voulez j'ai attacher tout le code de mon fichier comme pièce joint.
    Si c'est possible aussi de m'aider a déplacer le bouton scan_btn du xml vers le fichier java comme ca je pourrais séparer mon contrôle et ma vue .
    Fichiers attachés Fichiers attachés

  16. #16
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Beaucoup beaucoup à dire sur ton projet. Tu as un répertoire "smali", ne sachant pas ce que c'est, j'ai cherché un peu : https://code.google.com/p/smali/
    Un désasembleur d'APK. Je ne sais pas ce que tu essaies de faire, mais déjà, tu pars mal.

    Déjà, je m'étonne qu'il compile chez toi, le manifest étant faux pour l'activité de lancement : MainActivity d'écrit au lieu de Main.
    En le corrigeant, tout les boutons de ton menu fonctionnent, mais pas celui du QRCode, la méthode "launchScanner" n'existant pas.

    A priori, tu fais un mix entre l'APK décompilé, et ta propre application. Tu as l'air de lancer l'APK que tu décompiles plutôt que ton projet, et j'ai l'air de lancer ton projet.
    Je te suggères fortement de virer la décompilation et de partir de ton propre projet en intégrant toi-même la bibliothèque, qui a l'air d'être ZXing.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  17. #17
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2014
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Hizin Voir le message
    Beaucoup beaucoup à dire sur ton projet. Tu as un répertoire "smali", ne sachant pas ce que c'est, j'ai cherché un peu : https://code.google.com/p/smali/
    Un désasembleur d'APK. Je ne sais pas ce que tu essaies de faire, mais déjà, tu pars mal.

    Déjà, je m'étonne qu'il compile chez toi, le manifest étant faux pour l'activité de lancement : MainActivity d'écrit au lieu de Main.
    En le corrigeant, tout les boutons de ton menu fonctionnent, mais pas celui du QRCode, la méthode "launchScanner" n'existant pas.

    A priori, tu fais un mix entre l'APK décompilé, et ta propre application. Tu as l'air de lancer l'APK que tu décompiles plutôt que ton projet, et j'ai l'air de lancer ton projet.
    Je te suggères fortement de virer la décompilation et de partir de ton propre projet en intégrant toi-même la bibliothèque, qui a l'air d'être ZXing.

    J'ai envie de changer de méthode et d'intégrer le bouton scan directement sur le main.java mais j'ai du mal a l'intégrer et pour la bibliothèque j'utilise celle de ZBarScanner.

    Le code original de mon projet est attacher avec ce post comme fichier joint, et le but de mon projet c'est quand on scanne un QR code le téléphone effectué directement des appels.
    Fichiers attachés Fichiers attachés

  18. #18
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2014
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Je croix qu'on va avoir vraiment du mal a résoudre ce problème

  19. #19
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    A mon avis, la seule chose que tu puisses faire est de te débarrasser intégralement de l'application que tu as décompilée pour réaliser ton propre projet.
    Là, tu pars sur une modification d'APK, chose qui n'est pas triviale, pour quelque chose de plus facile à faire soi-même, à savoir lier une bibliothèque de scanner et l'utiliser.

    L'APK que tu as fournis plus tôt dans la discussion est celui du projet décompilé. De ton coté, tu tentes de créer un projet en parallèle et de lui rajouter des comportements. Si tu pouvais plutôt avoir accès aux sources de l'application de base pour que tu puisses la modifier, ce serait beaucoup plus facile.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  20. #20
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2014
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Hizin Voir le message
    A mon avis, la seule chose que tu puisses faire est de te débarrasser intégralement de l'application que tu as décompilée pour réaliser ton propre projet.
    Là, tu pars sur une modification d'APK, chose qui n'est pas triviale, pour quelque chose de plus facile à faire soi-même, à savoir lier une bibliothèque de scanner et l'utiliser.

    L'APK que tu as fournis plus tôt dans la discussion est celui du projet décompilé. De ton coté, tu tentes de créer un projet en parallèle et de lui rajouter des comportements. Si tu pouvais plutôt avoir accès aux sources de l'application de base pour que tu puisses la modifier, ce serait beaucoup plus facile.
    Le code original de l'application je lé publier dans l'avant dernier poste sous le nom projet_2 comme fichier joint pour que vous voyez un moyen si c'est possible que je modifie ce code et rajouter le bouton scan_btn dans java et je croix que c'est la meilleur solution pour éviter tout problème pour mes prochaines modification.

    Voici le code source java

    MainActivity.java

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    package com.man.test4;
     
    import android.app.Activity;
    import android.content.Intent;
    import android.content.pm.PackageManager;
    import android.net.Uri;
    import android.os.Bundle;
    import android.text.TextUtils;
    import android.view.View;
    import android.widget.Toast;
     
     
    import com.dm.zbar.android.scanner.ZBarConstants;
    import com.dm.zbar.android.scanner.ZBarScannerActivity;
     
    import net.sourceforge.zbar.Symbol;
     
    public class MainActivity extends Activity {
     
        private static final int ZBAR_SCANNER_REQUEST = 0;
        private static final int ZBAR_QR_SCANNER_REQUEST = 1;
     
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
        }
     
        public void launchScanner(View v) {
            if (isCameraAvailable()) {
                Intent intent = new Intent(this, ZBarScannerActivity.class);
                startActivityForResult(intent, ZBAR_SCANNER_REQUEST);
            } else {
                Toast.makeText(this, "Rear Facing Camera Unavailable", Toast.LENGTH_SHORT).show();
            }
        }
     
    //    public void launchQRScanner(View v) {
    //        if (isCameraAvailable()) {
    //            Intent intent = new Intent(this, ZBarScannerActivity.class);
    //            intent.putExtra(ZBarConstants.SCAN_MODES, new int[]{Symbol.QRCODE});
    //            startActivityForResult(intent, ZBAR_SCANNER_REQUEST);
    //        } else {
    //            Toast.makeText(this, "Rear Facing Camera Unavailable", Toast.LENGTH_SHORT).show();
    //        }
    //    }
     
        public boolean isCameraAvailable() {
            PackageManager pm = getPackageManager();
            return pm.hasSystemFeature(PackageManager.FEATURE_CAMERA);
        }
     
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            switch (requestCode) {
                case ZBAR_SCANNER_REQUEST:
                case ZBAR_QR_SCANNER_REQUEST:
                    if (resultCode == RESULT_OK) {
                        //Toast.makeText(this, "Scan Result = " + data.getStringExtra(ZBarConstants.SCAN_RESULT), Toast.LENGTH_SHORT).show();
                        Intent callIntent = new Intent(Intent.ACTION_CALL);
                        callIntent.setData(Uri.parse("tel:"+data.getStringExtra(ZBarConstants.SCAN_RESULT).toString()));
                        callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
                        startActivity(callIntent);
     
                    } else if(resultCode == RESULT_CANCELED && data != null) {
                        String error = data.getStringExtra(ZBarConstants.ERROR_INFO);
                        if(!TextUtils.isEmpty(error)) {
                            Toast.makeText(this, error, Toast.LENGTH_SHORT).show();
                        }
                    }
                    break;
            }
        }
    }
    Manifest.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.man.test4"
          android:versionCode="1"
          android:versionName="1.0">
     
        <uses-permission android:name="android.permission.CAMERA"/>
        <uses-permission android:name="android.permission.CALL_PHONE" />
        <uses-feature android:name="android.hardware.camera" android:required="false"/>
        <uses-sdk android:minSdkVersion="8" />
     
        <application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
            <activity android:name="MainActivity"
                      android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
     
            <activity android:name="com.dm.zbar.android.scanner.ZBarScannerActivity"
                      android:screenOrientation="landscape"
                      android:label="@string/app_name" />
        </application>
    </manifest>
    main.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:padding="5dp"
        android:gravity="center"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <Button
            android:id="@+id/scan_btn"
            android:layout_height="wrap_content"
            android:layout_width="fill_parent"
            android:onClick="launchScanner"
            android:text="@string/scan" />
    </LinearLayout>
    Alors Monsieur Le modérateur voyez vous une solution pour ajouter a ce code un bouton clickable?

Discussions similaires

  1. [Méthodes]UML vs MERISE Lequel pour quoi ?
    Par Daniel258 dans le forum Méthodes
    Réponses: 5
    Dernier message: 31/03/2003, 11h49
  2. Gros Problème avec DirectShow et la méthode RELEASE
    Par Olivier Delmotte dans le forum DirectX
    Réponses: 3
    Dernier message: 10/03/2003, 18h10
  3. [Singleton] Différences avec méthodes statiques
    Par Franche dans le forum Design Patterns
    Réponses: 1
    Dernier message: 26/02/2003, 17h10
  4. Probleme d'impression avec la méthode TForm->Print()
    Par Kid Icarus dans le forum C++Builder
    Réponses: 13
    Dernier message: 31/07/2002, 14h26
  5. Cryptage en C selon la méthode de césat
    Par shenron dans le forum C
    Réponses: 2
    Dernier message: 31/05/2002, 08h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo