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 :

Modifier dynamiquement un spinner


Sujet :

Composants graphiques Android

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 54
    Points : 39
    Points
    39
    Par défaut Modifier dynamiquement un spinner
    bonjour,

    Je souhaite modifier dynamiquement le contenu d'un spinner en fonction d'un autre spinner. Apparement il faut passer par un ArrayAdapter. je me suis inspiré de http://developer.android.com/guide/t...s/spinner.html
    Je n'ai pas d'erreur de compilation, mais à l'éxécution j'ai une erreur:
    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
    08-01 23:42:07.758: E/AndroidRuntime(19832): FATAL EXCEPTION: main
    08-01 23:42:07.758: E/AndroidRuntime(19832): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.tonnerreapp/com.example.tonnerreapp.PlayBookViewer}: java.lang.IllegalStateException: System services not available to Activities before onCreate()
    08-01 23:42:07.758: E/AndroidRuntime(19832): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1743)
    08-01 23:42:07.758: E/AndroidRuntime(19832): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1851)
    08-01 23:42:07.758: E/AndroidRuntime(19832): 	at android.app.ActivityThread.access$1500(ActivityThread.java:132)
    08-01 23:42:07.758: E/AndroidRuntime(19832): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1038)
    08-01 23:42:07.758: E/AndroidRuntime(19832): 	at android.os.Handler.dispatchMessage(Handler.java:99)
    08-01 23:42:07.758: E/AndroidRuntime(19832): 	at android.os.Looper.loop(Looper.java:150)
    08-01 23:42:07.758: E/AndroidRuntime(19832): 	at android.app.ActivityThread.main(ActivityThread.java:4293)
    08-01 23:42:07.758: E/AndroidRuntime(19832): 	at java.lang.reflect.Method.invokeNative(Native Method)
    08-01 23:42:07.758: E/AndroidRuntime(19832): 	at java.lang.reflect.Method.invoke(Method.java:507)
    08-01 23:42:07.758: E/AndroidRuntime(19832): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)
    08-01 23:42:07.758: E/AndroidRuntime(19832): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
    08-01 23:42:07.758: E/AndroidRuntime(19832): 	at dalvik.system.NativeStart.main(Native Method)
    08-01 23:42:07.758: E/AndroidRuntime(19832): Caused by: java.lang.IllegalStateException: System services not available to Activities before onCreate()
    08-01 23:42:07.758: E/AndroidRuntime(19832): 	at android.app.Activity.getSystemService(Activity.java:3697)
    08-01 23:42:07.758: E/AndroidRuntime(19832): 	at android.widget.ArrayAdapter.init(ArrayAdapter.java:271)
    08-01 23:42:07.758: E/AndroidRuntime(19832): 	at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:113)
    08-01 23:42:07.758: E/AndroidRuntime(19832): 	at com.example.tonnerreapp.PlayBookViewer.<init>(PlayBookViewer.java:14)
    08-01 23:42:07.758: E/AndroidRuntime(19832): 	at java.lang.Class.newInstanceImpl(Native Method)
    08-01 23:42:07.758: E/AndroidRuntime(19832): 	at java.lang.Class.newInstance(Class.java:1409)
    08-01 23:42:07.758: E/AndroidRuntime(19832): 	at android.app.Instrumentation.newActivity(Instrumentation.java:1040)
    08-01 23:42:07.758: E/AndroidRuntime(19832): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1735)
    08-01 23:42:07.758: E/AndroidRuntime(19832): 	... 11 more
    mon code:

    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
    public class PlayBookViewer extends Activity {
     
    	final ArrayAdapter<String> adapterWR = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, R.array.routeWRChoices);
    	final ArrayAdapter<String> adapterTE = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, R.array.routeWRChoices);
     
    	@Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.playbook_vwr);
     
            spinnerPos.setOnItemSelectedListener(new OnItemSelectedListener(){
     
    			public void onItemSelected(AdapterView<?> arg0, View arg1,
    					int arg2, long arg3) {			
     
    				if(((String) ((Spinner)arg0).getSelectedItem()).contains("TE")){
    					ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getApplicationContext(),
    					        R.array.routeTEChoices, android.R.layout.simple_spinner_item);
    					adapter.setDropDownViewResource(R.layout.playbook_vwr);
    					spinnerRoutes.setAdapter(adapter);
    				}else{
    					ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getApplicationContext(),
    					        R.array.routeWRChoices, android.R.layout.simple_spinner_item);
    					adapter.setDropDownViewResource(R.layout.playbook_vwr);
    					spinnerRoutes.setAdapter(adapter);
    				}
    			}
     
    			public void onNothingSelected(AdapterView<?> arg0) {
     
    			}
            });
    	}
    et pour finit mon 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
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".PlayBookViewer" >
     
        <TextView
            android:id="@+id/pb_header"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/cahier_de_jeu"
            android:textAppearance="?android:attr/textAppearanceLarge" />
     
        <Spinner
            android:id="@+id/positionChoice"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/pb_header"
            android:layout_marginTop="10dp"
            android:entries="@array/positionChoices" />
     
        <Spinner
            android:id="@+id/routeChoice"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/pb_header"
            android:layout_marginRight="10dp"
            android:layout_marginTop="10dp"
            android:layout_toRightOf="@+id/positionChoice"
            android:entries="@array/routeWRChoices" />
    </RelativeLayout>


    merci d'avance!

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 54
    Points : 39
    Points
    39
    Par défaut
    je suppose que c'est parce que j'ai mis mon listener dans le onCreate(), mais je ne vois pas comment faire autrement...

  3. #3
    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
    Tu supposes mal

    L'erreur provient d'une utilisation de quelque chose AVANT le onCreate.

    Il n'y a pas beaucoup de chose qui se font avant ça, donc il faut regarder le constructeur et les initialisations.

    Ta classe n'a pas de constructeur, donc reste les initialisations.

    Tu initialises les ArrayAdapter avec "this", l'activité, avant que celle-ci ne soit mise en oeuvre.
    Déplace donc ceci dans ton onCreate, et ça devrait fonctionner.
    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

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 54
    Points : 39
    Points
    39
    Par défaut
    merci pour la réponse. Je me disais bien que j'avais déjà essayer ça... donc en créant mes adapter dans la condition qui gère les Evénement du premier spinner, en fait

    fonctionne, mais spinner vide:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    adapterWR = new ArrayAdapter<String>(PlayBookViewer.this, R.layout.playbook_vwr, R.array.routeWRChoices);
    					adapterWR.setDropDownViewResource(R.layout.playbook_vwr);
    					spinnerRoutes.setAdapter(adapterWR);
    ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    adapterWR = new ArrayAdapter<String>(PlayBookViewer.this, R.layout.playbook_vwr, R.array.routeWRChoices, getResources().getStringArray(R.array.routeWRChoices));
    					adapterWR.setDropDownViewResource(R.layout.playbook_vwr);
    					spinnerRoutes.setAdapter(adapterWR);
    dans le second cas ,j'obtiens la même erreur que décrite ci dessus. J'ai essayer d'initialiser mon adapter avec une List<String> ou un String[] mais même résultat.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 54
    Points : 39
    Points
    39

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Modifier dynamiquement un Spinner
    Par max224 dans le forum Composants graphiques
    Réponses: 2
    Dernier message: 22/02/2013, 18h03
  2. Modifier dynamiquement le style d'un textarea
    Par AlLutun dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 09/11/2004, 15h18
  3. Réponses: 7
    Dernier message: 25/10/2004, 10h59
  4. [Applet] Modifier dynamiquement la mise en page
    Par Amnesiak dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 28/09/2004, 11h49
  5. VertexBuffer d'un Mesh modifiable dynamiquement ?
    Par Imhotep dans le forum DirectX
    Réponses: 7
    Dernier message: 10/07/2004, 15h23

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