James Wierzba
James Wierzba

Reputation: 17548

Get previously selected item from- Spinner OnItemSelectedListener event

Is there a way that I can get the previously selected item from a ItemSelected event on a spinner? My first thought was to respond to the OnItemClickedEvent, but that method is not supported for spinners.

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

                MyItem current = (MyItem) parent.getItemAtPosition(position);
                //MyItem previous = (MyItem) parent.getPrevious ... how
                }

                @Override
                public void onNothingSelected(AdapterView<?> parent)
                {
                //do nothing
                }
            });

I'm aware I can just cache the previous value, but it seems like a common operation that there should be a method for.

Upvotes: 5

Views: 3317

Answers (2)

Tega Edafiogho
Tega Edafiogho

Reputation: 21

spinner.setOnItemSelectedListener(
            new AdapterView.OnItemSelectedListener() {
                int prev = comboValues.getSelectedItemPosition();
                @Override
                public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
                                            prev=position;
                }

                @Override
                public void onNothingSelected(AdapterView<?> parentView) {


                }

            }
    );

Note that nothing happens if you select an item you have already selected

Upvotes: 2

Jacob Phillips
Jacob Phillips

Reputation: 9264

Use a variable to track the previous item. It would likely be at member of the Activity.

    MyItem previous, current;
    ...

    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
    {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
            {
                previous = current
                current = (MyItem) parent.getItemAtPosition(position);
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent)
            {
            //do nothing
            }
        });

Upvotes: 4

Related Questions