0

スピナーエントリの背景を色付けするこの静的メソッドがありますが、機能していません。理由について何か考えはありますか?拡張せずにこれをどのように行いますSpinnerAdapterか?

public static void colorizeSpinnerElements(final Activity activity, final int id) {
    final Spinner aux = (Spinner) activity.findViewById(id);
    final SpinnerAdapter adapter = aux.getAdapter();
    if (adapter != null) {
        final int num = adapter.getCount();
        for(int i = 0; i < num; i++) {
            adapter.getView(i, null, null).setBackgroundColor(ColorHelper.COLOR_LIST[i]);
        }
    }
}

これは、をロードするときにのみ行うため、表示を更新するために呼び出されSpinnerたときに背景色が失われるという事実に関連している可能性があると思います。getView()

4

1 に答える 1

1

アダプタのgetView()メソッドから同じことを行う必要があると思います。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = super.getView(position, convertView, parent);
    v.setBackgroundColor(ColorHelper.COLOR_LIST[position]);
    return v;    
}

編集:

あなたoverridegetDropDownView方法をすることができます。このメソッドは、アイテムごとに呼び出されます。

@Override
public View getDropDownView(int position, View view, ViewGroup parent) {

   if (view == null) {
       LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

       // expand your list item here
       view = vi.inflate(R.layout.mylistitem, null);
    }
    // get whatever items are in your view
    TextView text = (TextView) view.findViewById(R.id.text);
    ImageView left = (ImageView) view.findViewById(R.id.leftImage);

    // do whatever you want with your item view 

    view.setBackgroundColor(ColorHelper.COLOR_LIST[position]);    
    return(view);
}
于 2013-01-16T09:42:26.217 に答える