web-dev-qa-db-fra.com

Utiliser la liste de tableaux d'objets comme adaptateur de spinner

J'ai obtenu cette liste d'objets, et je dois la définir comme l'adaptateur de mon spinner comme ceci:

ArrayList<Contact> contactlist= new ArrayList<Contact>();
contactlist.add("Gabe");
contactlist.add("Mark");
contactlist.add("Bill");
contactlist.add("Steve");

ArrayAdapter adapter = new ArrayAdapter(this, Android.R.layout.simple_spinner_item, contactlist);
    adapter.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);

contactsSpinner.setAdapter(adapter);

Ceci est un exemple de mon objet Contact, il n'a que deux variables, Nom et ID

Contact contact = new Contact();
    contact.setName("Gabe")
    contact.setID("14575")

Je dois faire en sorte que le spinner affiche le nom du contact à partir de la liste de tableaux, car il affiche l'adresse du contact dans la mémoire, et lorsqu'il est sélectionné, je dois retourner l'ID du contact, pour effectuer une autre opération. Comment puis-je faire ceci?

19
Rafael

Salut ce que vous devez faire est assez facile, pour votre classe Contact, remplacez la méthode toString () et retournez le nom du contact.

regardez l'exemple. il est également disponible en github

public class SpinnerTestOneActivity extends AppCompatActivity {

    private Spinner spinner;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_spinner_test_one);
        Toolbar toolbar = (Toolbar) findViewById(R.id.my_custom_toolbar);
        setSupportActionBar(toolbar);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        initializeUI();
    }

    private void initializeUI() {

        spinner = (Spinner) findViewById(R.id.SpinnerTestOneActivity_spinner);

        ArrayList<Contact> contacts = new ArrayList<>();

        for (int i = 0; i < 10; i++) {
            contacts.add(new Contact("Name_" + i, "Id_" + i));
        }

        ArrayAdapter<Contact> adapter =
                new ArrayAdapter<Contact>(getApplicationContext(),  Android.R.layout.simple_spinner_dropdown_item, contacts);
        adapter.setDropDownViewResource( Android.R.layout.simple_spinner_dropdown_item);

        spinner.setAdapter(adapter);

    }

    private class Contact {
        private String contact_name;
        private String contact_id;

        public Contact() {
        }

        public Contact(String contact_name, String contact_id) {
            this.contact_name = contact_name;
            this.contact_id = contact_id;
        }

        public String getContact_name() {
            return contact_name;
        }

        public void setContact_name(String contact_name) {
            this.contact_name = contact_name;
        }

        public String getContact_id() {
            return contact_id;
        }

        public void setContact_id(String contact_id) {
            this.contact_id = contact_id;
        }

        /**
         * Pay attention here, you have to override the toString method as the
         * ArrayAdapter will reads the toString of the given object for the name
         *
         * @return contact_name
         */
        @Override
        public String toString() {
            return contact_name;
        }
    }

}

sortie

contact_image

69
Pankaj Nimgade