47 votes

Quelle est la bonne façon de mettre en œuvre des paires clé-valeur dans Spinner android

Est-ce la bonne façon de mettre en œuvre des paires clé-valeur pour un Spinner Android?

package com.mypackage

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Spinner;
import android.widget.ArrayAdapter;
import android.widget.AdapterView;
import android.widget.TextView;

public class SpinnerAndAdapter extends Activity
{
    TextView    valueTextView;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        valueTextView = (TextView)findViewById( R.id.selected );
        Spinner s = (Spinner)findViewById(R.id.spinner);
        final MyData items[] = new MyData[3];
        items[0] = new MyData( "key1","value1" );
        items[1] = new MyData( "key2","value2" );
        items[2] = new MyData( "key3","value3" );
        ArrayAdapter<MyData> adapter = 
            new ArrayAdapter<MyData>( 
                this,
                android.R.layout.simple_spinner_item,
                items );
        adapter.setDropDownViewResource(
            android.R.layout.simple_spinner_dropdown_item);
        s.setAdapter(adapter);
        s.setOnItemSelectedListener(
            new AdapterView.OnItemSelectedListener() {
                public void onItemSelected(
                        AdapterView<?> parent, 
                        View view, 
                        int position, 
                        long id) {
                    MyData d = items[position];
                    valueTextView.setText( d.getValue() );
                }

                public void onNothingSelected(AdapterView<?> parent) {
                }
            }
        );
    }

    class MyData {
        public MyData( String spinnerText, String value ) {
            this.spinnerText = spinnerText;
            this.value = value;
        }

        public String getSpinnerText() {
            return spinnerText;
        }

        public String getValue() {
            return value;
        }

        public String toString() {
            return spinnerText;
        }

        String spinnerText;
        String value;
    }
}

6voto

codeScriber Points 1800

c'est une façon. je l'utilise assez souvent-je utiliser mon propre adaptateur (héritant de BaseAdpater). Une autre façon serait de b comme ci-dessus pour avoir un indice (0,1,2 etc ) mappd à une valeur et lorsque vous recevez un élément, obtenir de l'indice du bien de sorte que vous pouvez récupérer la valeur fro ml de la carte. J'aime que l'option de moins en moins...

3voto

rymo Points 924

Afin d'éviter d'atteindre le dos en items[] de l'auditeur utiliser getItemAtPosition qui renvoie un Objet de la Carte. Pour accéder à l' MyData méthodes, vous devez jeter l'objet comme suit:

public void onItemSelected(
        AdapterView<?> parent, View view, int position, long id) {
    MyData d = (MyData) parent.getItemAtPosition(position);
    valueTextView.setText( d.getValue() );
}

2voto

Mighter Points 4865

Créer une carte des valeurs-clés, et de prendre une valeur dans onItemSelected(vous pouvez obtenir "clé" via spinner.getAdapter().getItem(position)).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X