如何使用SparseArray作为Adapter的源?

Ser*_*evi 5 android sparse-array android-listview android-adapter android-spinner

我有一个稀疏的值数组,我想在Spinner中填充,当选择该项时,我想获取id(这是稀疏数组中的键).

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

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

不知道如何实现上述目标,我正在考虑创建一个简单的ArrayAdapter实例,并将其作为源从SparseArray中提供,并在选择项目时,通过值查找键,我认为不会高效.

zap*_*apl 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

并扩展那个以获得一些实际的功能.例如喜欢

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;
    }
}
Run Code Online (Sandbox Code Playgroud)