2016-02-11 49 views
0

我想更改微调器下拉列表中第一项的颜色。 的解决方案之一是重写getDropDownView方法:在ArrayAdapter中重写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

回答

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; 
       } 
      }; 
+0

原因是convertView是一个“回收视图”。当第一个项目离开屏幕时,它的视图被发送回屏幕上的项目以保存更多的渲染计算。因此重复背景颜色。 –