Как скрыть один элемент в Android Spinner

Я ищу способ скрыть один элемент в виджете счетчика 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);

Ответы на вопрос(7)

Ваш ответ на вопрос