千家信息网

如何理解SparseBooleanArray

发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,这篇文章给大家介绍如何理解SparseBooleanArray,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。项目过程中,常常会遇到多选列表的问题。问题不麻烦,但似乎每一次的实现都
千家信息网最后更新 2025年02月02日如何理解SparseBooleanArray

这篇文章给大家介绍如何理解SparseBooleanArray,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

项目过程中,常常会遇到多选列表的问题。问题不麻烦,但似乎每一次的实现都不一样,或者说不规范吧。之前一直使用的HashMap来记录列表的选中情况,但心中一直惦记着其使用SparseBooleanArray的建议。心中甚是浮躁,静下心来总结一个知识点竟然到了需要"天时地利人和"的地步。

SparseBooleanArray是android提供的工具类,有人翻译成"稀疏数组"。是专门为手机这种内存资源稀缺的平台提供的 。根据其源代码,在数量不多的情况下,相比HashMap效率更高。这里的Integer相当于索引,而在SparseArray中这个索引使用的是二分法查找。

public class MyAdapter extends ArrayAdapter {    private Context mContext;    private List mData;    private SparseBooleanArray selectList = new SparseBooleanArray();    MyAdapter(@NonNull Context context, @LayoutRes int resource, @NonNull List 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就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

0