Android: как установить DropDown View Resource для Spinner? - PullRequest
0 голосов
/ 14 января 2012

Я написал код для Spinner, чтобы связать массив штатов США с Spinner в Android. Но проблема в том, что он показывает данные ссылочного типа в элементе Spinner, см. Рис.

Я добавляю android.R.layout.simple_spinner_dropdown_item, но не знаю, что добавить в макет. Я проверил много примеров на Google, и они добавляют simple_spinner_dropdown_item , но я не смог найти то, что добавить в макет. ниже вывод и код. Я хочу показывать состояния в списке вместо этих ненужных данных.

enter image description here

    Spinner spStates = new Spinner(this);
        spStates.setLayoutParams(new LayoutParams(screenWidth, LayoutParams.WRAP_CONTENT));

        final USAStates states[] = new USAStates[51];

        states[0] = new USAStates("Alabama", "AL");
        states[1] = new USAStates("Alaska", "AK");
        states[2] = new USAStates("Arizona", "AZ");
ArrayAdapter<USAStates> adapter = new ArrayAdapter<USAStates>(this, android.R.layout.simple_spinner_item, states);

        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spStates.setAdapter(adapter);
        spStates.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                USAStates d = states[position];
                Toast.makeText(getApplicationContext(), d.getStateAbrivation(), Toast.LENGTH_LONG).show();

            }

            public void onNothingSelected(AdapterView<?> parent) {
            }
        });




public class USAStates {
        private String _Statename;
        private String _StateAbrivation;

        public USAStates(String pStatename, String pStateAbrivation) {
            Statename(pStatename);
            StateAbrivation(pStateAbrivation);
        }
        public void Statename(String pStatename) {
            _Statename = pStatename;
        }
        public void StateAbrivation(String pStateAbrivation) {
            _StateAbrivation = pStateAbrivation;
        }

        public String getStatename() {
            return _Statename;
        }
        public String getStateAbrivation() {
            return _StateAbrivation;
        }
    }

Ответы [ 2 ]

2 голосов
/ 14 января 2012

Не уверен, просто делаю это не покладая рук, но в вашем классе USAState переопределяю ваш метод toString. Возможно, адаптер использует по умолчанию toString (), отсюда ваше странное отображение текста (которое, я полагаю, имя класса класса США США)

например

@Override
public String toString(){
return _Statename
}
0 голосов
/ 19 июля 2012

Первоначально я принял ответ toString(), но с тех пор обнаружил, что это не так.

У меня был ActionBar со спиннером / выпадающим списком, и мои элементы адаптера рендерились с String.toString() значение вместо названия, которое я установил в пользовательском адаптере.Добавление toString() изначально исправляло до тех пор, пока я не попытался установить составное рисование в том же макете.

Мне нужно было переопределить getDropDownView, а также getView в моем адаптере.

Имеяпереопределение toString() является симптомом того, что вы не переопределили правильные методы в своем адаптере.

При переопределении getDropDownView необходимость в переопределении toString() больше не требуется, и все работает как положено.

И ответ на следующий пост - отличный способ реализовать его с помощью метода super: чередующиеся цвета прядильщиков

...