5

我有一個稀疏的值的數組,我想填充在微調,當項目被選中,我想獲得id(這是從稀疏數組中的關鍵)。如何使用SparseArray作爲Adapter的源代碼?

從SparseArray創建適配器的首選方式是什麼?

是否有可能繼承像BaseAdapter或ListAdapter現有的適配器所以項目將有一個從SparseArray作爲項目ID的密鑰?

不知道如何實現上述,我想創建一個簡單的ArrayAdapter實例,並將其作爲源的SparseArray中的值,當該項目被選中時,通過值來查找關鍵字,我認爲將不會有效。

+0

我相信BaseAdapter是一個抽象類,ListAdapter是用一個List擴展它來存儲數據。你可以很好地擴展BaseAdapter。 – midhunhk

回答

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

這就是我想要的,謝謝:) –

+0

謝謝,節省了我的時間:) –

+0

因爲SparseArrays可以有不同於索引的鍵,當我得到adapterView時,是否可以訪問onlick中物品的實際鍵? – Rachit

相關問題