• 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.

  • 相关阅读:
    Linux中后台执行scp
    无意中发现一个开源的flv播放器
    Spark Label 可以显示多行,但 MX Label 不可以。
    牛到家的Flex效果
    回去研究一下rawChild
    这几天在做图片滤镜
    黑白图片滤镜
    Flash CS3里的滤镜在窗品>属性里,默认是不显示的,你点了后会出现在属性控制面板里
    currentFrameLabel和currentLabel的区别在于flash player9和10
    Flash游戏做html网页做不了的事
  • 原文地址:https://www.cnblogs.com/a354823200/p/4048581.html
Copyright © 2020-2023  润新知