5

I have a sparse array of values which I want to populate in a Spinner, and when the item is selected, I want to get the id (which is the key from the sparse array).

从 SparseArray 创建适配器的首选方法是什么?

是否可以对现有的适配器进行子类化,如 BaseAdapter 或 ListAdapter 以便项目将 SparseArray 中的键作为项目 ID?

我不知道如何实现上述内容,我正在考虑创建一个简单的阵列adapter实例,并从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 回答