2

I am updating the spinner at run time. When spinner items comes the first item selects automatically. I do not want, its required only to select the item of item Selected.

I have implement the one solution below:

        if (checkSelect > 1) {
                    if (camera_device_list_array_data != null) {
                        String url = camera_device_list_array_data.get(position).get(AppHelper.CAMERA_RTSP_URL);
                        String selected_name = camera_device_list_array_data.get(position).get(AppHelper.CAMERA_DEVICE_NAME);
                        GlobalConstants.selected_camera_device_id = Integer.parseInt(camera_device_list_array_data.get(position).get(AppHelper.CAMERA_DEVICE_ID));
                        connected_camera_name_spinner_tv.setText(selected_name);
                        if (mediaPlayer != null) {
                            relaMediaPlay();
                        }
//                        path = url;
                        selected_camera_tv.setText(camera_device_list_array_data.get(position).get(AppHelper.CAMERA_DEVICE_IP_ADDRESS));

                        playVideo();

//                        }

                    }

The problem with this is:

This is working as required but first item is not get selected, Its selected first item after selection of the second item.

Any help is appreciated.Thanks

Deepak
  • 1,669
  • 1
  • 18
  • 28
  • Can you please http://stackoverflow.com/questions/2562248/how-to-keep-onitemselected-from-firing-off-on-a-newly-instantiated-spinner/29602298#29602298, I gave answered here. I prevent to give same answer so please look at into it. – Hiren Patel Jul 11 '15 at 16:39

3 Answers3

1

Create a custom spinner

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Spinner;

public class CustomSpinner extends Spinner {
    OnItemSelectedListener listener;
    private AdapterView<?> lastParent;
    private View lastView;
    private long lastId;

    public CustomSpinner(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
        initlistner();
    }

    @Override
    public void setSelection(int position) {
        if (position == getSelectedItemPosition() && listener != null) {
            listener.onItemSelected(lastParent, lastView, position, lastId);
        } else {
            super.setSelection(position);
        }

    }

    private void initlistner() {
        // TODO Auto-generated method stub
        super.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> parent, View view,
                    int position, long id) {
                // TODO Auto-generated method stub
                lastParent = parent;
                lastView = view;
                lastId = id;
                if (listener != null) {
                    listener.onItemSelected(parent, view, position, id);
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                // TODO Auto-generated method stub
                if (listener != null) {
                    listener.onNothingSelected(parent);
                }
            }
        });

    }

    public void setOnItemSelectedEvenIfUnchangedListener(
            OnItemSelectedListener listener) {
        this.listener = listener;
    }

}

Set Listener

private OnItemSelectedListener listener;

listener = new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {}

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub

        }
    };

Pass the listener object to custom listener

cusSpinner.setOnItemSelectedEvenIfUnchangedListener(listener);
Anoop M Maddasseri
  • 10,213
  • 3
  • 52
  • 73
1

Try this for select item by value :

 String Selectvalue = camera_device_list_array_data.get(position).get(AppHelper.CAMERA_DEVICE_IP_ADDRESS);

    if (!Selectvalue .equals(null)) {
        int SelectPostion = camera_device_list_array_data.getPosition(Selectvalue);
        yourSpinner.setSelection(SelectPostion);
        SelectPostion = 0;
    }

or try this for select with position in array adapter :

yourSpinner.setSelection(Postion);
Ali Gh
  • 680
  • 7
  • 9
  • i think spinner index starts from 0 and if i set the item to 0 then it will automatically select the first index and if user again click on the item it will not get selected – Deepak Jul 01 '15 at 05:19
  • handle your event by this code and set selectvalue with public static parameter it should be work – Ali Gh Jul 01 '15 at 06:01
0
Best Answer that works for me, pasting it below:

public class MySpinner extends Spinner {

    public MySpinner(Context context)
    { super(context); }

    public MySpinner(Context context, AttributeSet attrs)
    { super(context, attrs); }

    public MySpinner(Context context, AttributeSet attrs, int defStyle)
    { super(context, attrs, defStyle); }

    @Override public void
    setSelection(int position, boolean animate)
    {
        boolean sameSelected = position == getSelectedItemPosition();
        super.setSelection(position, animate);
        if (sameSelected) {
            // Spinner does not call the OnItemSelectedListener if the same item is selected, so do it manually now
            getOnItemSelectedListener().onItemSelected(this, getSelectedView(), position, getSelectedItemId());
        }
    }

    @Override public void
    setSelection(int position)
    {
        boolean sameSelected = position == getSelectedItemPosition();
        super.setSelection(position);
        if (sameSelected) {
            // Spinner does not call the OnItemSelectedListener if the same item is selected, so do it manually now
            getOnItemSelectedListener().onItemSelected(this, getSelectedView(), position, getSelectedItemId());
        }
    }
}
Deepak
  • 1,669
  • 1
  • 18
  • 28