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.

posted on 2014-10-24 16:09  大有@  阅读(1598)  评论(0编辑  收藏  举报

导航