Подтвердить что ты не робот

Элемент Spinner автоматически выбирается при вводе активности. Как мне избежать этого?

У меня есть spinner в Android-приложении, и его событие onItemSelected() автоматически запускается при вводе активности.

Как мне избежать этого?

4b9b3361

Ответ 1

Мы можем использовать флаг и просто включать его, когда прядильщик действительно тронут.

private boolean isSpinnerTouched = false; 

spinner.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                isSpinnerTouched = true;
                return false;
            }
        });
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> adapter, View arg1,
                        int arg2, long arg3) {
                    if (!isSpinnerTouched) return;
                    // do what you want 
                    }
        });

Ответ 2

Чтобы добавить в Jerry Abraham, вам следует очистить выделение перед включением setOnItemSelectedListener

  Spinner mSpinner=(Spinner)findViewById(R.id.mySpinner);
  int initialSelectedPosition=mSpinner.getSelectedItemPosition();
  mSpinner.setSelection(initialSelectedPosition, false); //clear selection
  mSpinner.setOnItemSelectedListener(this); //set listener after clearing section

Ответ 3

Нет никакого способа избежать этого.

Вы можете добавить некоторый флаг, указывающий на готовность вашего приложения и использовать его в вашем методе onItemSelected(), чтобы решить, что делать в каждом случае.

Ответ 4

Я решил эту проблему. Вы можете избежать этой проблемы, не устанавливая значения по умолчанию для счетчика

        int initialposition=spinner.getSelectedItemPosition();
        spinner.setSelection(initialposition, false);

Это позволит избежать входа в onItemSelected()

Ответ 6

Ну, вы можете добавить фиктивный выбор к исходному адаптеру и игнорировать номер позиции в setOnItemSelectedListener. Это не очень, но это работает. См. Этот код для настройки элементов для адаптера массива.

List<String> names = new ArrayList<String>();
names.add("");
names.addAll(realValues);

Затем в setOnItemSelectedListener вы можете сделать это:

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
    {
        if (position > 0)
        {
            String name = names.get(position - 1);
        }
        else
        {
            Log.d(TAG, "selected nothing or perhaps the dummy value");
        }
    }

Ответ 7

Просто и просто... подтвердите с помощью логического, чтобы увидеть, является ли первый раз...

Spinner mySpinner = (Spinner)findViewById(R.id.spinner_xml_pro);
        mySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                if(isSpinnerInitial){ // globar var boolean isSpinnerInitial = false;
                 //do something
               }else
                    isSpinnerInitial=true;
            }

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

            }
        });

Отметьте с помощью spinner.post(новый Runnable()...) или этот другой мой источник

Ответ 8

Вы можете избежать этого, игнорируя первый щелчок,

private boolean isSpinnerInitial = true; //As global variable

public void onItemSelected(xxx xxx, xxx xxx, xxx xxx, xxx xxx) {
    if(isSpinnerInitial) {
        isSpinnerInitial = false;
        return;
    }
    // Write your code here
}