Я ищу способ скрыть один элемент в виджете счетчика Android. Это позволит вам имитировать счетчик без выбранных элементов и гарантирует, что обратный вызов onItemSelected() всегда вызывается для каждого выбранного элемента (если скрытый элемент является «текущим»). Обычно в счетчике всегда есть один элемент, который не генерирует обратный вызов, а именно текущий.
В stackoverflow есть некоторый код для отключения (выделения серым цветом) элементов, но не для того, чтобы полностью скрыть элементы, как если бы они не существовали.
После долгих экспериментов я придумал несколько хакерское решение, которое работает на различных старых и новых платформах Android. У него есть небольшие косметические недостатки, которые трудно заметить. Я все еще хотел бы услышать о более официальном решении, кроме «не делайте этого со спиннером».
Это всегда скрывает первый элемент в счетчике, но может быть довольно легко расширено, чтобы скрыть произвольный элемент или более одного элемента. Добавьте фиктивный элемент, содержащий пустую строку, в начале списка элементов счетчика. Вы можете захотеть установить текущий выбор счетчика на элемент 0, прежде чем откроется диалоговое окно счетчика, это будет имитировать невыбранный счетчик.
Пример настройки Spinner с переопределением метода ArrayAdapter:
List<String> list = new ArrayList<String>();
list.add(""); // Initial dummy entry
list.add("string1");
list.add("string2");
list.add("string3");
// Populate the spinner using a customized ArrayAdapter that hides the first (dummy) entry
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list) {
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent)
{
View v = null;
// If this is the initial dummy entry, make it hidden
if (position == 0) {
TextView tv = new TextView(getContext());
tv.setHeight(0);
tv.setVisibility(View.GONE);
v = tv;
}
else {
// Pass convertView as null to prevent reuse of special case views
v = super.getDropDownView(position, null, parent);
}
// Hide scroll bar because it appears sometimes unnecessarily, this does not prevent scrolling
parent.setVerticalScrollBarEnabled(false);
return v;
}
};
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mySpinner.setAdapter(dataAdapter);