Пользовательские обтекателя втулки адаптер простой блесны в выпадающем списке пункт не правильно показывать


Я получаю данные из базы данных SQLite и присваиваю их объектам данных. Я использую пользовательский адаптер spinner (реализует SpinnerAdapter), чтобы поместить их в spinners, чтобы переопределить методы getItem() и getItemId(). Однако android.R.layout.simple_spinner_dropdown_item отображается неправильно (скриншоты из My Galaxy Tab 2 10.1):

Неверный счетчик из объекта данных

Напротив, это спиннер, который заполняется из массива в R.array (правильный вид/размер):

Правильный спиннер из массива R.

Сделано этим код:

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(), R.array.quote_prices, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);

Я не могу получить этот взгляд, реализуя / расширяя какой-то адаптер (я также пытался расширить BaseAdapter безрезультатно). Это код для моего адаптера spinner в его нынешнем виде:

public class MySpinnerAdapter implements SpinnerAdapter {

    private Context context;
    /**
     * The internal data (the ArrayList with the Objects).
     */
    private List<? extends BaseDO> data;

    public MySpinnerAdapter(Context context, List<?extends BaseDO> data){
        this.context = context;
        this.data = data;
    }

    /**
     * Returns the Size of the ArrayList
     */
    @Override
    public int getCount() {
        return data.size();
    }

    @Override
    public Object getItem(int position) {
        return data.get(position);
    }

    @Override
    public long getItemId(int position) {
        return data.get(position).getId();
    }

    @Override
    public int getItemViewType(int position) {
        return 0;
    }

    @Override
    public int getViewTypeCount() {
        return 1;
    }

    @Override
    public boolean hasStableIds() {
        return false;
    }

    @Override
    public boolean isEmpty() {
        return false;
    }

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            LayoutInflater vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = vi.inflate(android.R.layout.simple_spinner_dropdown_item, null);
        }
        ((TextView) convertView).setText(data.get(position).toString());
        return convertView;

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        TextView textView = (TextView) View.inflate(context, android.R.layout.simple_spinner_item, null);
        textView.setText(data.get(position).toString());
        return textView;
    }


    @Override
    public void registerDataSetObserver(DataSetObserver observer) {

    }

    @Override
    public void unregisterDataSetObserver(DataSetObserver observer) {

    }

    public List<? extends BaseDO> getData() {
        return data;
    }

}
Любая помощь будет признательна.

EDIT: я забыл упомянуть, что это называется using

spnnrTerm.setAdapter(new MySpinnerAdapter(getActivity(), termList));
1 11

1 ответ:

Я знаю, что этот вопрос стар, но у меня был тот же самый вопрос, и я только что понял проблему. После изучения источника для ArrayAdapter.java я заметил, что он передавал ViewGroup к inflater, а я нет. это было проблемой все время.

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            LayoutInflater vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = vi.inflate(android.R.layout.simple_spinner_dropdown_item, parent, false);
        }
        ((TextView) convertView).setText(data.get(position).toString());
        return convertView;

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        TextView textView = (TextView) View.inflate(context, android.R.layout.simple_spinner_item, null);
        textView.setText(data.get(position).toString());
        return textView;
    }