在ArrayAdapter中重写getDropDownView以更改下拉列表中特定行的颜色也会更改另一行的颜色

时间:2016-02-11 20:54:43

标签: android android-arrayadapter android-spinner

我想更改微调器下拉列表中第一个项目的颜色。 其中一个解决方案是覆盖getDropDownView方法:

ArrayAdapter<CharSequence> sprache_ratoromanisch_adapter =
            new ArrayAdapter<CharSequence>(
                    getContext(),
                    android.R.layout.simple_spinner_item,
                    list_sprache_ratoromanisch) {

                @Override
                public View getDropDownView (int position, View convertView, ViewGroup parent){
                    View row = super.getDropDownView(position, convertView, parent);
                    if(position == 0) {
                       row.setBackgroundColor(Color.LTGRAY);
                    }
                    return(row);
                }
            };

但我有一个问题 - 如果元素的数量足够大并且它们超出了微调器的可见部分 - 在滚动之前不可见的第一和第二元素在它们变得可见时也会改变颜色。 items in spinner's dropdown change color

1 个答案:

答案 0 :(得分:2)

我发现了问题。这是正确的版本。

final ArrayAdapter<CharSequence> sprache_ratoromanisch_adapter =
            new ArrayAdapter<CharSequence>(
                    getContext(),
                    android.R.layout.simple_spinner_item,
                    list_sprache_ratoromanisch) {

                @Override
                public View getDropDownView (int position, View convertView, ViewGroup parent){
                    View row = null;

                    if(position == 0) {
                        row = super.getDropDownView(position, convertView, parent);
                        row.setBackgroundColor(Color.LTGRAY);
                     }
                    else {
                        row = super.getDropDownView(position, null, parent);
                    }
                    return row;
                }
            };