这篇文章给大家介绍如何理解SparseBooleanArray,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
项目过程中,常常会遇到多选列表的问题。问题不麻烦,但似乎每一次的实现都不一样,或者说不规范吧。之前一直使用的HashMap<Integer, Boolean>来记录列表的选中情况,但心中一直惦记着其使用SparseBooleanArray的建议。心中甚是浮躁,静下心来总结一个知识点竟然到了需要“天时地利人和”的地步。
SparseBooleanArray是android提供的工具类,有人翻译成“稀疏数组”。是专门为手机这种内存资源稀缺的平台提供的 。根据其源代码,在数量不多的情况下,相比HashMap<Integer, Object>效率更高。这里的Integer相当于索引,而在SparseArray<E>中这个索引使用的是二分法查找。
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;
}
}
关于如何理解SparseBooleanArray就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。