У меня есть spinner в Android-приложении, и его событие onItemSelected()
автоматически запускается при вводе активности.
Как мне избежать этого?
У меня есть spinner в Android-приложении, и его событие onItemSelected()
автоматически запускается при вводе активности.
Как мне избежать этого?
Мы можем использовать флаг и просто включать его, когда прядильщик действительно тронут.
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
}
});
Чтобы добавить в 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
Нет никакого способа избежать этого.
Вы можете добавить некоторый флаг, указывающий на готовность вашего приложения и использовать его в вашем методе onItemSelected(), чтобы решить, что делать в каждом случае.
Я решил эту проблему. Вы можете избежать этой проблемы, не устанавливая значения по умолчанию для счетчика
int initialposition=spinner.getSelectedItemPosition();
spinner.setSelection(initialposition, false);
Это позволит избежать входа в onItemSelected()
Я нашел решение этой проблемы и разместил ее здесь (с образцом кода):
Spinner onItemSelected() выполняется, если не предполагается
Ну, вы можете добавить фиктивный выбор к исходному адаптеру и игнорировать номер позиции в 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");
}
}
Просто и просто... подтвердите с помощью логического, чтобы увидеть, является ли первый раз...
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()...) или этот другой мой источник
Вы можете избежать этого, игнорируя первый щелчок,
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
}