zoukankan      html  css  js  c++  java
  • 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.

  • 相关阅读:
    求解整数集合的交集(腾讯笔试)
    关于屏幕适配之比例布局
    (转)注册JNI函数的两种方式
    正则表达式记录
    当年一个简单可用的多线程断点续传类
    最近用到的几个工具方法
    Android中包含List成员变量的Parcel以及Parcel嵌套写法示例
    java实现计算MD5
    一个用于去除状态栏和虚拟导航栏的BaseActivity
    MVP的模板
  • 原文地址:https://www.cnblogs.com/a354823200/p/4048581.html
Copyright © 2011-2022 走看看