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

Composants graphiques Android Discussion :

Comment faire des registerForContextMenu sur des views définies dans différents layouts ?


Sujet :

Composants graphiques Android

  1. #1
    Membre habitué

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 14
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2010
    Messages : 50
    Points : 168
    Points
    168
    Par défaut Comment faire des registerForContextMenu sur des views définies dans différents layouts ?
    Bonjour à tous,

    Premièrement, je suis tout débutant sur le dev Androïd, il est probable que je n'ai pas compris quelque chose, ou bien que je tente de faire quelque chose qui n'a pas de sens, mais bon... voici mon problème :

    Dans une Activity, je souhaiterais pouvoir faire des registerForContextMenu sur deux view, définies dans deux fichiers XML layouts différents.

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
     
            setContentView(R.layout.mylayout);
            registerForContextMenu(findViewById(R.id.my_textview));
            registerForContextMenu(findViewById(R.id.glop_view));
     
        }

    Au lancement ça explose :
    10-29 14:25:33.238: ERROR/AndroidRuntime(15444): Uncaught handler: thread main exiting due to uncaught exception
    10-29 14:25:33.278: ERROR/AndroidRuntime(15444): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ebulatik.gukak.MyDroid/com.ebulatik.gukak.MyDroid.MyDroid}: java.lang.NullPointerException
    10-29 14:25:33.278: ERROR/AndroidRuntime(15444): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
    10-29 14:25:33.278: ERROR/AndroidRuntime(15444): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
    10-29 14:25:33.278: ERROR/AndroidRuntime(15444): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
    10-29 14:25:33.278: ERROR/AndroidRuntime(15444): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
    10-29 14:25:33.278: ERROR/AndroidRuntime(15444): at android.os.Handler.dispatchMessage(Handler.java:99)
    10-29 14:25:33.278: ERROR/AndroidRuntime(15444): at android.os.Looper.loop(Looper.java:123)
    10-29 14:25:33.278: ERROR/AndroidRuntime(15444): at android.app.ActivityThread.main(ActivityThread.java:4363)
    10-29 14:25:33.278: ERROR/AndroidRuntime(15444): at java.lang.reflect.Method.invokeNative(Native Method)
    10-29 14:25:33.278: ERROR/AndroidRuntime(15444): at java.lang.reflect.Method.invoke(Method.java:521)
    10-29 14:25:33.278: ERROR/AndroidRuntime(15444): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:862)
    10-29 14:25:33.278: ERROR/AndroidRuntime(15444): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
    10-29 14:25:33.278: ERROR/AndroidRuntime(15444): at dalvik.system.NativeStart.main(Native Method)
    10-29 14:25:33.278: ERROR/AndroidRuntime(15444): Caused by: java.lang.NullPointerException
    10-29 14:25:33.278: ERROR/AndroidRuntime(15444): at android.app.Activity.registerForContextMenu(Activity.java:2352)
    10-29 14:25:33.278: ERROR/AndroidRuntime(15444): at com.ebulatik.gukak.MyDroid.MyDroid.onCreate(MyDroid.java:21)
    10-29 14:25:33.278: ERROR/AndroidRuntime(15444): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    10-29 14:25:33.278: ERROR/AndroidRuntime(15444): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
    10-29 14:25:33.278: ERROR/AndroidRuntime(15444): ... 11 more

    "my_textview" et "glop_view" sont tous deux des views de type textviews.
    Il est à noter que "my_textview" est défini dans le layout "myLayout" (fichier mylayout.xml) alors que glop_view est lui défini dans un autre layout "main" (fichier main.xml).

    Si je commente le deuxième registerForContextMenu, tout fonctionne correctement.

    J'essaye surement de faire un truc tordu, mais je me demande pourquoi je ne peux pas faire des registerForContextMenu sur des views de différents layouts ?
    -> je me dis qu'il peut être intéressant de vouloir faire ce genre de choses par exemple si l'Activity est amenée à afficher différents layouts en fonction des actions de l'utilisateur, et que l'on ait des contextMenu à gérer dans ces différentes views...

    Mais peut etre que je n'ai pas du tout le bonne approche ?
    Pour info, je faisais juste quelques tests tout en lisant le devguide Android, je ne cherche pas particulièrement à faire quelque chose de précis, juste à comprendre mon erreur

    Merci à tous !

  2. #2
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    Salut,

    En simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    findViewById(R.id.glop_view)
    Permet de chercher un composant dans la vue courante associé à ton activité.
    Ici la vue courante est : R.layout.mylayout
    Donc il y a peu de chance que tu trouves ton composant déclaré dans une autre vue.

    Maintenant, si tu veux faire que ton code fonctionne, là je ne sais pas trop. Peut être chercher plutôt à extraire ta description XML de ton menu dans un fichier XML à part entière. ça sera peut être déjà mieux.
    Puis utiliser ce genre de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.context_menu, menu);

  3. #3
    Membre habitué

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 14
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2010
    Messages : 50
    Points : 168
    Points
    168
    Par défaut
    Hello,
    Merci pour ta réponse rapide,

    Du coup j'ai une question subsidiaire

    Ci dessous l'extrait de la javadoc de findView :
    public View findViewById (int id)
    Finds a view that was identified by the id attribute from the XML that was processed in onCreate(Bundle).
    Que signifie exactement "from the XML that was processed in onCreate(Bundle)." ?

    -> Est-ce que ça veut dire en gros qu'il faut faire un registerForContextMenu après et seulement après avoir fait un setContentView dans le onCreate ?

    Merci d'avance

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/10/2008, 13h32
  2. Comment faire un DROP sur des tables qui change de nom ?
    Par GeantBioHazard dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 04/07/2008, 15h03
  3. Comment faire un Case sur des résultats HResult ?
    Par aityahia dans le forum Langage
    Réponses: 4
    Dernier message: 18/10/2007, 12h59
  4. Réponses: 1
    Dernier message: 09/11/2006, 12h08
  5. [VB6] Comment faire un update sur des textbox qui sont créés
    Par bb62 dans le forum VB 6 et antérieur
    Réponses: 27
    Dernier message: 16/02/2006, 14h52

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