12

SQLite データベースからデータを取得し、それらをデータ オブジェクトに割り当てています。メソッドとメソッドSpinnerAdapterをオーバーライドするために、カスタム スピナー アダプター (implements ) を使用してスピナーに配置しています。ただし、正しく表示されません (Galaxy Tab 2 10.1 のスクリーンショット):getItem()getItemId()android.R.layout.simple_spinner_dropdown_item

データ オブジェクトからの間違ったスピナー

R.array対照的に、これは(正しい外観/サイズ)の配列から取り込まれたスピナーです。

R.array の適切なスピナー

このコードによって行われます:

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無駄に拡張しようとしました)。これは私のスピナーアダプターのコードです。

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

}

どんな助けでも大歓迎です。

編集:これは次を使用して呼び出されることを忘れていました

spnnrTerm.setAdapter(new MySpinnerAdapter(getActivity(), termList));
4

1 に答える 1

15

この質問が古いことは知っていますが、同じ問題を抱えていて、問題を解決したばかりです。ArrayAdapter.javaのソースを調べたところ、ViewGroup がインフレータに渡されていましたが、そうではありませんでした。これがずっと問題でした。

    @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;
    }
于 2014-02-23T08:21:02.027 に答える