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 :

Spinner dans une listView


Sujet :

Composants graphiques Android

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2008
    Messages
    483
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 483
    Points : 105
    Points
    105
    Par défaut Spinner dans une listView
    Bonjour,

    Après avoir suivi un tutoriel, je suis dans un impasse puisque je ne parviens pas à l'adapter à mon problème.

    Voici le résultat actuel de ce code.



    Le but est d'afficher une listView composée de spinner.

    Main.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" 
        android:layout_width="fill_parent" android:layout_height="fill_parent">
        <ListView android:id="@+id/listView1" android:layout_height="match_parent" android:layout_width="match_parent" />
    </LinearLayout>
    rowview.xml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal" android:layout_width="match_parent"
        android:layout_height="wrap_content" android:weightSum="1">
        <TextView android:layout_width="wrap_content"
            android:layout_height="match_parent" android:id="@+id/text"
            android:layout_weight="0.5" android:textSize="25sp" />
        <Spinner android:layout_width="0dp" android:layout_height="wrap_content"
            android:id="@+id/spin" android:prompt="@string/choice_prompt"
            android:layout_weight="0.5" />
    </LinearLayout>
    strings.xm :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="hello">Hello World, ListViewTestActivity!</string>
        <string name="app_name">ListViewTest</string>
        <string name="choice_prompt">Select a choice</string>
        <string-array name="choices">
            <item>Alpha</item>
            <item>Bravo</item>
            <item>Charlie</item>
        </string-array>
    </resources>
    ListViewActivity :

    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
    public class ListViewTestActivity extends Activity {
     
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
     
            ListView listView = (ListView) findViewById(R.id.listView1);
     
            DataHolder data = new DataHolder(this);
            DataHolder data1 = new DataHolder(this);
            DataHolder data2 = new DataHolder(this);
            DataHolder data3 = new DataHolder(this);
            DataHolder data4 = new DataHolder(this);
     
            DataAdapter d = new DataAdapter(this, R.layout.rowview, new DataHolder[] { data, data1, data2, data3, data4 });
     
            listView.setAdapter(d);
        }
    }
    La classe DataHolder :

    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
    public class DataHolder {
     
        private int selected;
        private ArrayAdapter<CharSequence> adapter;
     
        public DataHolder(Context parent) {
            adapter = ArrayAdapter.createFromResource(parent, R.array.choices, android.R.layout.simple_spinner_item);
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        }
     
        public ArrayAdapter<CharSequence> getAdapter() {
            return adapter;
        }
     
        public String getText() {
            return (String) adapter.getItem(selected);
        }
     
        public int getSelected() {
            return selected;
        }
     
        public void setSelected(int selected) {
            this.selected = selected;
        }
     
    }
    Et la classe DataAdapter :

    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
    public class DataAdapter extends ArrayAdapter<DataHolder> {
     
        private Activity myContext;
     
        public DataAdapter(Activity context, int textViewResourceId, DataHolder[] objects) {
            super(context, textViewResourceId, objects);
            myContext = context;
        }
     
        // We keep this ViewHolder object to save time. It's quicker than findViewById() when repainting.
        static class ViewHolder {
            protected DataHolder data;
            protected TextView text;
            protected Spinner spin;
        }
     
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view = null;
     
            // Check to see if this row has already been painted once.
            if (convertView == null) {
     
                // If it hasn't, set up everything:
                LayoutInflater inflator = myContext.getLayoutInflater();
                view = inflator.inflate(R.layout.rowview, null);
     
                // Make a new ViewHolder for this row, and modify its data and spinner:
                final ViewHolder viewHolder = new ViewHolder();
                viewHolder.text = (TextView) view.findViewById(R.id.text);
                viewHolder.data = new DataHolder(myContext);
                viewHolder.spin = (Spinner) view.findViewById(R.id.spin);
                viewHolder.spin.setAdapter(viewHolder.data.getAdapter());
     
                // Used to handle events when the user changes the Spinner selection:
                viewHolder.spin.setOnItemSelectedListener(new OnItemSelectedListener() {
     
                    @Override
                    public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
                        viewHolder.data.setSelected(arg2);
                        viewHolder.text.setText(viewHolder.data.getText());
                    }
     
                    @Override
                    public void onNothingSelected(AdapterView<?> arg0) {
                    }
     
                });
     
                // Update the TextView to reflect what's in the Spinner
                viewHolder.text.setText(viewHolder.data.getText());
     
                view.setTag(viewHolder);
     
                Log.d("DBGINF", viewHolder.text.getText() + "");
            } else {
                view = convertView;
            }
     
            // This is what gets called every time the ListView refreshes
            ViewHolder holder = (ViewHolder) view.getTag();
            holder.text.setText(getItem(position).getText());
            holder.spin.setSelection(getItem(position).getSelected());
     
            return view;
        }
    }
    Le soucis est que je ne parviens pas à adapter ce code avec ma propre liste de Strings (et non des Strings présents dans le fichier xml)

    Merci d'avance.

  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
    Bonjour,

    Ton souci est ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    adapter = ArrayAdapter.createFromResource(parent, R.array.choices, android.R.layout.simple_spinner_item);

    Il faut que tu utilises une autre méthode que createFromResource par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new ArrayAdapter (parent, android.R.layout.simple_spinner_item, TalistedeString[])
    Ici la doc :
    http://developer.android.com/referen...ayAdapter.html
    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.

Discussions similaires

  1. Lister les processus et les PID dans une listview .
    Par maxoudu328 dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 16/10/2005, 16h03
  2. [c#]Suppresion dans une listview
    Par onouiri dans le forum Windows Forms
    Réponses: 3
    Dernier message: 21/04/2005, 13h00
  3. Afficher un Hint dans une ListView
    Par Larion dans le forum C++Builder
    Réponses: 13
    Dernier message: 13/03/2005, 13h45
  4. [VB.NET] Objet .Tag dans une ListView
    Par Lois dans le forum Windows Forms
    Réponses: 7
    Dernier message: 12/10/2004, 16h35
  5. [VB6] Supprimer un enregistrement dans une ListView ??
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/11/2002, 09h37

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