您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何理解SparseBooleanArray,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
項(xiàng)目過程中,常常會(huì)遇到多選列表的問題。問題不麻煩,但似乎每一次的實(shí)現(xiàn)都不一樣,或者說不規(guī)范吧。之前一直使用的HashMap<Integer, Boolean>來記錄列表的選中情況,但心中一直惦記著其使用SparseBooleanArray的建議。心中甚是浮躁,靜下心來總結(jié)一個(gè)知識(shí)點(diǎn)竟然到了需要“天時(shí)地利人和”的地步。
SparseBooleanArray是android提供的工具類,有人翻譯成“稀疏數(shù)組”。是專門為手機(jī)這種內(nèi)存資源稀缺的平臺(tái)提供的 。根據(jù)其源代碼,在數(shù)量不多的情況下,相比HashMap<Integer, Object>效率更高。這里的Integer相當(dāng)于索引,而在SparseArray<E>中這個(gè)索引使用的是二分法查找。
public class MyAdapter extends ArrayAdapter<String> { private Context mContext; private List<String> mData; private SparseBooleanArray selectList = new SparseBooleanArray(); MyAdapter(@NonNull Context context, @LayoutRes int resource, @NonNull List<String> objects) { super(context, resource, objects); this.mContext = context; this.mData = objects; initSelectList(); } @NonNull @Override public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) { if (convertView == null){ convertView = LayoutInflater.from(mContext).inflate(R.layout.item_choice, parent, false); } TextView text = (TextView) convertView.findViewById(R.id.text); CheckBox box = (CheckBox) convertView.findViewById(R.id.checkbox); text.setText(getItem(position)); box.setChecked(selectList.get(position)); box.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { selectList.put(position, isChecked); } }); return convertView; } void initSelectList() {//全部取消選中 for (int i = 0; i < mData.size(); i++) { selectList.put(i, false); } notifyDataSetChanged(); } void checkAll(){//全選 for (int i = 0; i < mData.size(); i++) { selectList.put(i, true); } notifyDataSetChanged(); } void reverse(){//反選 for (int i = 0; i < mData.size(); i++) { if (selectList.get(i)){ selectList.put(i, false); }else{ selectList.put(i, true); } } notifyDataSetChanged(); } SparseBooleanArray getSelectedList(){ return selectList; } }
關(guān)于如何理解SparseBooleanArray就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。