user529543
user529543

Reputation:

Android Spinner remove OnItemSelectedListener

Others has the problem as doesn't working, I have the problem it is working ( and it shouldn't )

I have a data model, which is saved, and need to loaded back to GUI, Activity. It has a few spinner value.

The data is place to a common accesible class, a reference holder.

The activity's onCreate it will check if is on edit mode or not with:

editMode = getIntent().getBooleanExtra(EDIT_MODE_KEY, false);

It will load the UI elements from xml, and start selecting, filling values. At editing mode, and at creation mode it should select values what has the data model. At runtime ( after onResume() ) has some workflow: is something is selected at spinner1, than should refresh the spinner2 adapter content and so on.

It doesn't worked the plain .setSelection(positiontoSelect); so I have added a delayed post, now is working.

My problem is: I would like remove for temp the selection listener, call the selection and add back the listener.

Here is the code, which should be modified:

          if (editedTimezonePosition > -1) {                        
                final int positiontoSelect = editedTimezonePosition;
                new Handler().postDelayed(new Runnable() {
                    public void run() {
                        OnItemSelectedListener listener = spSelectTimezone.getOnItemSelectedListener();
                        spSelectTimezone.setOnItemSelectedListener(null);
                        spSelectTimezone.setSelection(positiontoSelect);
                        spSelectTimezone.setOnItemSelectedListener(listener);                   
                    }
                }, 250);            
            }

setting to null the listener has no effect: I am getting callback to my listener method.

If you have any idea how to fix it, please share it!

Upvotes: 4

Views: 2957

Answers (1)

Barak
Barak

Reputation: 16393

You could put a counter variable in your onItemSelected method. If it is 0 (meaning the first time the method has been called), do nothing but increment the variable. If it is greater than 0, execute the rest of your code.

private int mSpinnerSelectionCount=0;

public void onItemSelected(AdapterView<?> parent, View view,
    int pos, long id) {
        if(mSpinnerSelectionCount == 0){
            mSpinnerSelectionCount++;
        } else {
            // Your normal selection code here
        }    
    }

Upvotes: 2

Related Questions