首页 > 代码库 > android中定义一个可勾选的ListView

android中定义一个可勾选的ListView

1、在layout中定义一个CheckedTextView

<CheckedTextView            android:id="@+id/textView1"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:checkMark="?android:attr/listChoiceIndicatorMultiple"            android:gravity="center_vertical"            android:text="Full Name"            android:textColor="#000" />

2、定义一个Adapter,里面维护一个SpraseBooleanArray,每次getView()时,会根据SpraseBooleanArray里面存储的值设置check状态

class MyAdapter extends BaseAdapter {        //这个数组中记录着被勾选项的状态    private SparseBooleanArray mCheckedTable;       public MyAdapter() {        mCheckedTable = new SparseBooleanArray();        //其他代码        }

3、在adapter的getView()方法中,根据SparseBooleanArray中的值来设置checked状态

public View getView(int position, View convertView, ViewGroup parent) {        CheckedTextView checkedView = convertView.findViewById(R.id.textView1);    checkedView.setChecked(mCheckedTable.get(position));    //其他代码}

4、设置一个OnItemClickListener,当列表项被点击时,执行CheckedTextView.toggle()方法,将状态转换过来。

5、并把CheckedTextView的新状态以及位置(位置为key,状态为value)加入array中

myListView.setOnItemClickListener(new OnItemClickListener() {               @Override            public void onItemClick(AdapterView<?> parent, View view,                    int position, long id) {                MyAdapter adapter = (MyAdapter) parent.getAdapter();                CheckedTextView name = (CheckedTextView) view.findViewById(R.id.textView1);                name.toggle();                //put the checked item position into boolean array                    adapter.getCheckedTable().put(position, name.isChecked());                               }        });

所有被选中的项目信息,都在SpraseBooleanArray中,可以通过一个index和for循环,依次从中取出数据(使用keyAt()和valueAt()方法)。Value为true的key,即对应被选中的item.

android中定义一个可勾选的ListView