5

スピナーに入力したい値のスパース配列があり、アイテムが選択されたら、ID (スパース配列のキー) を取得したいと考えています。

SparseArray からアダプタを作成するための推奨される方法は何ですか?

BaseAdapter や ListAdapter などの既存のアダプタをサブクラス化して、アイテムが SparseArray のキーをアイテム ID として持つようにすることは可能ですか?

上記を達成する方法がわからないので、単純な ArrayAdapter インスタンスを作成し、ソースとして SparseArray の値を与え、アイテムが選択されたときに値でキーを検索することを考えていますが、これはそうではないと思います効率的。

4

1 に答える 1

13

のサブクラスを作成するとBaseAdapterうまくいくはずです。例

public abstract class SparseArrayAdapter<E> extends BaseAdapter {

    private SparseArray<E> mData;
    public void setData(SparseArray<E> data) {
        mData = data;
    }

    @Override
    public int getCount() {
        return mData.size();
    }

    @Override
    public E getItem(int position) {
        return mData.valueAt(position);
    }

    @Override
    public long getItemId(int position) {
        return mData.keyAt(position);
    }
}

それを拡張して、実際の機能を取得します。たとえば、

public class SparseStringsAdapter extends SparseArrayAdapter<String> {
    private final LayoutInflater mInflater;
    public SparseStringsAdapter(Context context, SparseArray<String> data) {
        mInflater = LayoutInflater.from(context);
        setData(data);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        TextView result = (TextView) convertView;
        if (result == null) {
            result = (TextView) mInflater.inflate(android.R.layout.simple_list_item_1, null);
        }
        result.setText(getItem(position));
        return result;
    }
}
于 2014-02-10T13:13:00.633 に答える