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 :

Liste retournant un ID


Sujet :

Android

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2011
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 89
    Points : 109
    Points
    109
    Par défaut Liste retournant un ID
    Bonjour,
    mon problème du jour est pourtant Ô combien simple, et je m'arrache les cheveux depuis hier après midi.

    Dans mon application, l'actionbar a un element qui affiche une Alertdialogue.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    AlertDialog.Builder buildersemaine = new AlertDialog.Builder(this);
    buildersemaine.setTitle("Selectionnez une semaine : ");
    j'aimerais afficher une liste d'éléments texte provenant d'un ArrayList<String>.
    Vous vous en doutez peut etre, les éléments contenus dans cette liste varient.
    En fait cette liste contient 52 chaines de caractères du type "Semaine 1 du 3 janvier au 9 janv", "Semaine 2 du 7 janvier au 13 janvier"
    ce que je désire, c'est que lorsque l'utilisateur clique sur un élement, c'est récupérer le numéro de la semaine (normalement la position dans l'arrlist de l'élément +1 (car la liste débute à 0 bien sûr)

    Je suis depuis hier midi en train de me casser la tête sur ce "soucis" pourtant si simple en html ^^.

    Je me suis inspiré de : http://www.developpez.net/forums/d10...-alertedialog/
    Cependant le script plante au moment ou je tente d'affecter une valeur textuelle.

    j'ai créé un objet héritant de BaseAdapter.
    la méthode getView est ré écrite ainsi :

    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
    @Override
    	public View getView(int position, View convertView, ViewGroup parent) {
    		// TODO Auto-generated method stub
    		LinearLayout monlayout = new LinearLayout(context);
    		Myholder myholder;
     
    		if(convertView == null){
    			LayoutInflater inflater = context.getLayoutInflater();
    			monlayout = (LinearLayout) inflater.inflate(R.layout.modellistevent, null);
    			myholder = new Myholder(events.get(position));
    			monlayout.setTag(myholder);
    			myholder.label = (TextView) monlayout.findViewById(R.id.labelliste);
     
     
    		}
    		else{
    			monlayout = (LinearLayout)convertView;
    			myholder = (Myholder) monlayout.getTag();
    			Toast.makeText(this.context, "non null", Toast.LENGTH_SHORT).show();
     
    		}
     
    		myholder.label.setText("chose");
     
    		return monlayout;
    	}
    à partir du moment où je tente d'affecter une valeur au label, plantage. (texte du genre "coucou" ou la chaine venant de de mon arraylist events.)

    ha j'allais oublier :
    Cela correspond à modellisteevent.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
     
        <TextView android="@+id/labelliste"
            android:layout_width="match_parent"
        android:layout_height="35dp"
        android:text="bidule" />
     
    </LinearLayout>
    Sincèrement, je trouve cette façon de faire bien compliquée ^^".
    me suis-je trompée de voie ?

    bref pour ré-expliquer "simplement" : je cherche à faire exactement la même chose qu'avec un CharSequence[] car je pourrais récupérer au clic sur un élément : DialogInterface dialog, int elm, et grâce à elm, connaitre le numéro de semaine. Mais comme mes chaines de caractères vont varier (on change toute la liste), je suis obligé d'utiliser un Arraylist.
    merci à toute aide que vous pourrez me fournir.

  2. #2
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Vous vous en doutez peut etre, les éléments contenus dans cette liste varient.
    Euh varient comment , et est ce que tu mets à jour ta listview pour la peine.

    Cependant le script plante au moment ou je tente d'affecter une valeur textuelle.
    Tu obtiens quoi comme erreur ?

    j'ai créé un objet héritant de BaseAdapter.
    la méthode getView est ré écrite ainsi
    Qu'est ce que tu utilisait avant pour afficher ta ListView ?

    à partir du moment où je tente d'affecter une valeur au label, plantage. (texte du genre "coucou" ou la chaine venant de de mon arraylist events.)
    Quelle erreur obtiens tu ?

    Maintenant vu ton problème le mieux serait d'utiliser un ArrayAdapter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TonArray= new ArrayAdapter<String>(this, R.layout.list_item, taliste)
    setListAdapter(TonArray);
    Et lorsque tu modifies tes donnée contenue dans taliste (je crois qu'un clear et addall s'impose )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TonArray.notifyDataSetChanged()
    http://developer.android.com/referen...ayAdapter.html

    PS : Pour les erreur , tu les trouveras dans ton logcat
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2011
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 89
    Points : 109
    Points
    109
    Par défaut
    bonjour.

    Mon arraylist change du tout au tout. suivant qu'un élément soit sélectionné dans une autre liste, cette liste-ci voit tous ses éléments rafraichis.

    Comme la liste contient 52 "lignes", je les change toutes.

    Les erreurs retournées :
    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
    11-15 09:17:15.004: E/AndroidRuntime(930): FATAL EXCEPTION: main
    11-15 09:17:15.004: E/AndroidRuntime(930): java.lang.NullPointerException
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at com.appli.planning.WeekListAdapter.getView(WeekListAdapter.java:65)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at android.widget.AbsListView.obtainView(AbsListView.java:1964)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at android.widget.ListView.measureHeightOfChildren(ListView.java:1228)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at android.widget.ListView.onMeasure(ListView.java:1139)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at android.view.View.measure(View.java:10577)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4270)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1284)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at android.widget.LinearLayout.measureVertical(LinearLayout.java:613)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at android.widget.LinearLayout.onMeasure(LinearLayout.java:519)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at android.view.View.measure(View.java:10577)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4270)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1284)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at android.widget.LinearLayout.measureVertical(LinearLayout.java:613)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at android.widget.LinearLayout.onMeasure(LinearLayout.java:519)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at android.view.View.measure(View.java:10577)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4270)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at android.widget.FrameLayout.onMeasure(FrameLayout.java:267)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at android.view.View.measure(View.java:10577)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4270)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1284)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at android.widget.LinearLayout.measureVertical(LinearLayout.java:613)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at android.widget.LinearLayout.onMeasure(LinearLayout.java:519)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at android.view.View.measure(View.java:10577)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4270)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at android.widget.FrameLayout.onMeasure(FrameLayout.java:267)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:1876)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at android.view.View.measure(View.java:10577)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at android.view.ViewRoot.performTraversals(ViewRoot.java:860)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at android.view.ViewRoot.handleMessage(ViewRoot.java:1944)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at android.os.Handler.dispatchMessage(Handler.java:99)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at android.os.Looper.loop(Looper.java:126)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at android.app.ActivityThread.main(ActivityThread.java:3997)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at java.lang.reflect.Method.invokeNative(Native Method)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at java.lang.reflect.Method.invoke(Method.java:491)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
    11-15 09:17:15.004: E/AndroidRuntime(930): 	at dalvik.system.NativeStart.main(Native Method)
    11-15 09:17:18.433: I/Process(930): Sending signal. PID: 930 SIG: 9
    comme si il n'arrivait pas à trouver mon textview (pointeur null).

    Avant pour afficher ma listview, je n'utilisais rien de spécial.

    Voici comment j'ai fait simplement pour une autre liste dans mon activy:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public boolean onOptionsItemSelected(MenuItem item) {
    [...]
    	CharSequence[] annees = {"2010", "2011", "2012", "2013"};
    [...]
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
                	builder.setTitle("Selectionnez une année : ");
                	builder.setItems(annees, new DialogInterface.OnClickListener() {
                	    public void onClick(DialogInterface dialog, int elm) {
                	        itemcourant.setTitle(annees[elm]);
                	    }
                	});
                	AlertDialog alert = builder.create();
                	alert.show();
    }
    Je cherche donc à faire la même chose avec une liste pouvant varier du tout au tout et plus un CharSequence.

    merci pour ta réponse ^^.

Discussions similaires

  1. Réponses: 6
    Dernier message: 13/01/2012, 14h19
  2. Réponses: 0
    Dernier message: 02/06/2010, 23h57
  3. quand je selectionne une valeur dans une liste, retourne une autre valeur
    Par nsqualli dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/12/2008, 14h23
  4. Réponses: 1
    Dernier message: 20/04/2007, 15h35
  5. [MFC] Retourner une liste d'objets
    Par 1cado dans le forum MFC
    Réponses: 10
    Dernier message: 28/07/2003, 12h11

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