У меня есть намерение начать работу с несколькими прядильщиками на странице. Я только что установил свой счетчик прослушивателей ItemSelected, следуя этому руководству. Проблема в том, что первый элемент в каждом Spinner в основном "Пожалуйста, выберите", просто чтобы он не был пустым ящиком: поэтому мой ItemSelected Listener обнаруживает тот факт, что, пожалуйста, выберите в spinner и, похоже, предположите, что он был выбран, а не загружен по умолчанию. В идеале я хочу, чтобы слушатель обнаружил только, когда сделан фактический выбор. Каков наилучший способ игнорировать выбор по умолчанию?
Здесь соответствующий код:
ageSpinner = (Spinner) findViewById(R.id.ageSpinner);
ageAdapter = ArrayAdapter.createFromResource
(this, R.array.ageArray, android.R.layout.simple_spinner_item);
ageAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
ageSpinner.setAdapter(ageAdapter);
ageSpinner.setOnItemSelectedListener(new MyOnItemSelectedListener());
public class MyOnItemSelectedListener implements OnItemSelectedListener {
public void onItemSelected(AdapterView<?> parent,
View view, int pos, long id) {
Toast.makeText(parent.getContext(), "The planet is " +
parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
}
public void onNothingSelected(AdapterView parent) {
// Do nothing.
}
}
Проблема в том, что выбор выполняется на первом этапе компоновки. Таким образом, при первом вычислении вашего макета Spinner
поднимает onItemSelected
. Это довольно раздражает, но так оно и работает. Вы можете попробовать пару разных вещей, но если у вас уже есть "Пожалуйста, выберите" Что-то ", лучшее, что вы можете сделать, это проигнорировать событие, когда выбранный элемент равен 0.
Здесь возможно множество подходов. Например, вы можете переопределить нормальное поведение Spinner
с помощью отражения или просто переключиться на Button
имитирующую Spinner
, которая при нажатии на нее AlertDialog
.
Однако другие решения могут быть проще реализовать. Барак назвал один, в то время как альтернативой было бы просто проверить выбранную позицию в Spinner
, считая, что "Пожалуйста, выберите" всегда будет первым элементом (и, следовательно, в позиции 0
), и вы не будете сортировать по Предметы.
Я уверен, что вы найдете одну из возможностей, подходящих для вашей проблемы, но, возможно, вы также можете немного подробнее рассказать о том, почему именно это проблематично onItemSelected(...)
увольняется для первоначального выбора?
Установите значение boolean в false, проверьте его в onItemSelected и если false, установите его в true и больше ничего не делайте. В следующий раз, когда это правда, как обычно.
Решение от OP.
public class MyOnItemSelectedListener implements OnItemSelectedListener {
public void onItemSelected(AdapterView<?> parent,
View view, int pos, long id) {
if (pos != 0) {
//this if makes sure it ignores 0, which is
//Please Select in the drop down
Toast.makeText(parent.getContext(), parent.getTag().toString() +
parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
}
}
public void onNothingSelected(AdapterView parent) {
// Do nothing.
}
}