modabeckham
modabeckham

Reputation: 247

Android Spinner doesn't show selected item position in MyOnItemSelectedListener

These are the 3 spinners I'm using in my application. crustSP, sizeSP and extraDescriptionOneSP. Functional vise these 3 spinners working perfectly(Loading items and can select any item as needed) but my problem is in crustSP and sizeSP spinner it doesn't show selected item position in MyOnItemSelectedListener. It shows the selected item position of extraDescriptionOneSP.

Can any one figure what is the problem with crustSP and sizeSP spinners. Badly I want the selected item position.

                crust = Utils.removeDuplicatesFromList(crust);
                ArrayAdapter<String> dataAdapterCru = new ArrayAdapter<String>(
                        this, android.R.layout.simple_spinner_item, crust);
                dataAdapterCru
                        .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                crustSP.setAdapter(dataAdapterCru);
                crustSP.setOnItemSelectedListener(new OnItemSelectedListener() {

                    public void onNothingSelected(AdapterView<?> arg0) {
                    }

                    @Override
                    public void onItemSelected(AdapterView<?> parent,
                            View view, int position, long id) {

                        String crustSelectedItem = crustSP.getSelectedItem()
                                .toString();

                        List<String> resultDescription = getFilteredDescriptions(
                                crustSelectedItem, description);
                        ArrayAdapter<String> dataAdapterDes = new ArrayAdapter<String>(
                                ActivityPizzaCustomize.this,
                                android.R.layout.simple_spinner_item,
                                resultDescription);
                        dataAdapterDes
                                .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                        sizeSP.setAdapter(dataAdapterDes);
                        sizeSP.setAdapter(new NothingSelectedSpinnerAdapter(
                                dataAdapterDes,
                                R.layout.contact_spinner_row_nothing_selected,
                                ActivityPizzaCustomize.this));
                    }
                });

                sizeSP.setOnItemSelectedListener(new OnItemSelectedListener() {

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

                    @Override
                    public void onItemSelected(AdapterView<?> parent,
                            View view, int position, long id) {

                    }
                });

                extraDescriptionOneSP
                        .setOnItemSelectedListener(new MyOnItemSelectedListener());
                extraDescription = Utils
                        .removeDuplicatesFromList(extraDescription);
                ArrayAdapter<String> dataAdapterExtraDesOne = new ArrayAdapter<String>(
                        this, android.R.layout.simple_spinner_item,
                        extraDescription);
                dataAdapterExtraDesOne
                        .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                extraDescriptionOneSP.setAdapter(dataAdapterExtraDesOne);
                extraDescriptionOneSP
                        .setAdapter(new NothingSelectedSpinnerAdapter(
                                dataAdapterExtraDesOne,
                                R.layout.contact_spinner_row_nothing_selected,
                                this));

my MyOnItemSelectedListener code,

public class MyOnItemSelectedListener implements OnItemSelectedListener {

        @Override
        public void onItemSelected(AdapterView<?> parent, View view,
                int position, long id) {

            // check which spinner triggered the listener
            switch (parent.getId()) {

            case R.id.sp_crust:


                System.out.println("crust = " + position);
                break;

            case R.id.sp_pizza_size:


                System.out.println("size = " + position);
                break;

            case R.id.sp_extratoppingone:


                System.out.println("extratoppingone = " + position);
                break;

Upvotes: 0

Views: 727

Answers (2)

John David
John David

Reputation: 334

Try this, this should work for u

crust = Utils.removeDuplicatesFromList(crust);
                    ArrayAdapter<String> dataAdapterCru = new ArrayAdapter<String>(
                            this, android.R.layout.simple_spinner_item, crust);
                    dataAdapterCru
                            .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                    crustSP.setAdapter(dataAdapterCru);
                    crustSP.setOnItemSelectedListener(new MyOnItemSelectedListener(ActivityPizzaCustomize.this) {

                        public void onNothingSelected(AdapterView<?> arg0) {
                        }

                        @Override
                        public void onItemSelected(AdapterView<?> parent,
                                View view, int position, long id) {

                            String crustSelectedItem = crustSP.getSelectedItem()
                                    .toString();

                            List<String> resultDescription = getFilteredDescriptions(
                                    crustSelectedItem, description);
                            sizeSP
                            .setOnItemSelectedListener(new MyOnItemSelectedListener(ActivityPizzaCustomize.this));
                            ArrayAdapter<String> dataAdapterDes = new ArrayAdapter<String>(
                                    ActivityPizzaCustomize.this,
                                    android.R.layout.simple_spinner_item,
                                    resultDescription);
                            dataAdapterDes
                                    .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                            sizeSP.setAdapter(dataAdapterDes);
                            sizeSP.setAdapter(new NothingSelectedSpinnerAdapter(
                                    dataAdapterDes,
                                    R.layout.contact_spinner_row_nothing_selected,
                                    ActivityPizzaCustomize.this));
                        }
                    });

Upvotes: 1

A B
A B

Reputation: 338

The problem is that, you have to set the same MyOnItemSelectedListener to custSP and sizeSP as well.

extraDescriptionOneSP.setOnItemSelectedListener(new MyOnItemSelectedListener(ActivityPizzaCustomize.this));
custSP.setOnItemSelectedListener(new MyOnItemSelectedListener(ActivityPizzaCustomize.this));
sizeSP.setOnItemSelectedListener(new MyOnItemSelectedListener(ActivityPizzaCustomize.this));

To keep your logic, you should make some changes to the MyOnItemSelectedListener, and add what you want to do on each spinner item selected, something like this:

public class MyOnItemSelectedListener implements OnItemSelectedListener 
{
   Activity activity;

    public MyOnItemSelectedListener (Activity p_activity)
   {
       activity = p_activity;
   }
  @Override
    public void onItemSelected(AdapterView<?> parent, View view,
            int position, long id) {

        // check which spinner triggered the listener
        switch (parent.getId()) {

        case R.id.sp_crust:
         {
                System.out.println("crust = " + position);

 String crustSelectedItem = crustSP.getSelectedItem()
                                .toString();

                        List<String> resultDescription = getFilteredDescriptions(
                                crustSelectedItem, description);
                        ArrayAdapter<String> dataAdapterDes = new ArrayAdapter<String>(
                                activity,
                                android.R.layout.simple_spinner_item,
                                resultDescription);
                        dataAdapterDes
                                .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                        sizeSP.setAdapter(dataAdapterDes);
                        sizeSP.setAdapter(new NothingSelectedSpinnerAdapter(
                                dataAdapterDes,
                                R.layout.contact_spinner_row_nothing_selected,
                                activity));

            }
            break;

        case R.id.sp_pizza_size:


            System.out.println("size = " + position);
            break;

        case R.id.sp_extratoppingone:


            System.out.println("extratoppingone = " + position);
            break;

Upvotes: 0

Related Questions