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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2014
    Messages : 21
    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 : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    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 averti
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2014
    Messages : 21
    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 : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    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 averti
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2014
    Messages : 21
    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 émérite
    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
    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é ?

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