Как получить идентификатор счетчика или тег из метода getDropDownView в Android - PullRequest
1 голос
/ 26 июля 2011

У меня есть несколько блесен, для которых я создал собственный ArrayAdapter, чтобы я мог изменить внешний вид выпадающего меню.Я хочу манипулировать видом в зависимости от того, к какому центру относится выпадающий список.Я думал, что смогу сделать что-то вроде parent.getTag (), но он возвращает ноль.

Адаптер пользовательского массива выглядит так:

class BackgroundColorAdapter extends ArrayAdapter<String> {
    BackgroundColorAdapter() {
        super(SettingsActivity.this, R.layout.settings_spinner_item, R.id.item_text, textColors);
    }

    public View getDropDownView (int position, View convertView, ViewGroup parent){
        View row=super.getView(position, convertView, parent);
        if(parent.getTag().equals("background"){
            //Do custom stuff here
        }
        return(row);
    }
}

и я устанавливаю тег:

settingsSpinner.setTag("bg_color_spinner");
settingsSpinner.setAdapter(new BackgroundColorAdapter());

Мне кажется, я не совсем понимаю, как работает иерархия представлений, но кажется логичным, что родительский элемент выпадающего счетчика будет спиннером.Кто-нибудь знает, как я могу узнать, к какому бланку принадлежит выпадающий список в getDropDownView?

edit: сделал settingsSpinner одним бланком вместо массива бланков, чтобы сделать его менее запутанным

Ответы [ 2 ]

2 голосов
/ 25 октября 2011

В конце концов, это работает, вот код, например, который изменяет текстовый шрифт для каждого элемента в раскрывающемся списке.

class TextSizeAdapter extends ArrayAdapter<String> {

        TextSizeAdapter() {
            super(SettingsActivity.this, R.layout.settings_spinner_item, R.id.item_text, textSizes);
        }

        public View getDropDownView (int position, View convertView, ViewGroup parent){

            View row=super.getView(position, convertView, parent);
            TextView text = (TextView)row.findViewById(R.id.item_text);
            text.setTextSize(TypedValue.COMPLEX_UNIT_PX,appState.FONTSIZES[position]);
            RadioButton radio = (RadioButton)row.findViewById(R.id.item_radio);
            if(settingsSpinners[2].getSelectedItemPosition() == position){
                radio.setChecked(true);
            }else{
                radio.setChecked(false);
            }

            return(row);
        }
    }
0 голосов
/ 26 июля 2011

Я незнаком с getDropDownView () и не знаю, почему вы его используете.Документация для getDropDownView () гласит следующее о родителе:

parent родительский объект, к которому это представление в конечном итоге будет присоединено

Это не 'Звучит как «родитель», который вы ищете ... Поскольку «родитель» в вызове getView () действительно является Spinner, вы можете использовать его для хранения переменной экземпляра родительского элемента, как показано ниже:

public Spinner mParent = null;

public View getView (int position, View convertView, ViewGroup parent)
{
    this.mParent = parent;
    return super.getView(position, convertView, parent);
}

public View getDropDownView(int position, View convertView, ViewGroup parent)
{    // Your code here -> but use 'mParent'
}

Я не пробовал, но, возможно, это обходной путь, чтобы получить то, что вам нужно.Пожалуйста, дайте мне знать, если вы нашли решение.

...