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.

时间: 2024-10-22 08:31:09

android中定义一个可勾选的ListView的相关文章

android中保存一个ArrayList到SharedPreferences的方法

保存: public static boolean saveArray() { SharedPrefernces sp=SharedPrefernces.getDefaultSharedPrefernces(this); SharedPrefernces.Editor mEdit1= sp.edit(); mEdit1.putInt("Status_size",sKey.size()); /*sKey is an array*/ for(int i=0;i<sKey.size()

在 C# 中定义一个真正只读的 List

public class Class1 { public readonly SynchronizedReadOnlyCollection<int> ints; public Class1() { ints = new SynchronizedReadOnlyCollection<int>(new[] {1,2,3}); } public void test() { ints.Add ? } } 在 C# 中定义一个真正只读的 List

在主方法中定义一个大小为50的一维整型数组,数组i名为x,数组中存放着{1,3,5,…,99}输出这个数组中的所有元素,每输出十个换一行

package hanqi; import java.util.Scanner; public class Test7 { public static void main(String[] args) { //在主方法中定义一个大小为50的一维整型数组,数组i名为x,数组中存放着{1,3,5,…,99}输出这个数组中的所有元素,每输出十个换一行 int [] x=new int[50]; int a =1; for(int i=0;i<50;i++) { x[i]=a; a+=2; } for(

在主方法中定义一个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余 位置存的是‘#’;输出这个数组中的所有元素。

//在主方法中定义一个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余 位置存的是‘#’:输出这个数组中的所有元素. char [][]y=new char [10][10]; for(int i=0;i<10;i++) { for(int j=0;j<10;j++) { if(i==j||i+j==9) { y[i][j]='*'; } else { y[i][j]='#'; } } } for(int i =0;i<10;i++) { for(int k

如何在android中利用Theme设置application 的所有listview的style?~

今天看VLC的源代码,发现一个很神奇的东西 所有listview的点击效果背景色都是橘黄色 花了点时间找了一下看看怎么实现的. 首先,定义一个<selector> like this: <selector> <item android:state_pressed="true"> <shape android:shape="rectangle"> <solid android:color="@color/

android中实现带图片和checkbox的listview

android中实现带图片和checkbox的listview

C++中定义一个不能被继承的类

1.一种错误的解法 最开始是从构造函数开始着手(先声明这种方法不能定义一个不能被继承的类,这是一种错误的方法,但是很容易往这方面想),假设存在下面的继承体系: 现在假设B是一个不能被继承的类,那么如果存在B的子类C,那么C的构造过程应该会报错,那么如何能够让B能正常构造而C不能正常构造呢?首先A,B,C的构造函数和析构函数都假设是public的,最开始想的是让B私有继承自A,根据private继承的特性,父类中public和protected的成员在子类中都会变成private的,那么A的构造函

在Android中实现一个简易的Http服务器

最近遇到一个需求需要在App中创建一个Http服务器供供浏览器调用,用了下开源的微型Htpp服务器框架:NanoHttpd,项目地址:https://github.com/NanoHttpd/nanohttpd 直接上代码 public class HttpServer extends NanoHTTPD { public HttpServer(int port) { super(port); } @Override public Response serve(IHTTPSession sess

Android中实现一个简单的逐帧动画(附代码下载)

场景 Android中的逐帧动画,就是由连续的一张张照片组成的动画. 效果 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 首先准备一组不同表情的照片,放在res/drawable下,然后在此目录下新建动画资源文件fairy.xml <?xml version="1.0" encoding="utf-8"?> <animati