Вы можете избежать первого события с флагом в OnItemSelectedListener.
sp_lang.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
Boolean firstEventConsumed = false;
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if (firstEventConsumed) {
recreate();
} else {
firstEventConsumed = true;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
РЕДАКТИРОВАТЬ
Я нашел решение, но это всего лишь обходной путь.Это не окончательное решение.
Это странное поведение, когда вы воссоздаете действие.Когда действие создается в первый раз, оно не вызывает дважды onItemSelected
, но при повторном создании оно вызывается дважды.
То, что я сделал ниже, - это контроль, когда выбран элементпользователем (обработка события касания) и когда это выполняется действием.
public class MainActivity extends AppCompatActivity {
private Boolean isUserAction = false;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// get the spinner
// create the adapter
spinner.setAdapter(spinnerAdapter);
spinner.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
isUserAction = true;
return false;
}
});
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
if (isUserAction) {
recreate();
}
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
// do nothing
}
});
}
}