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中,可以通过一个indexfor循环,依次从中取出数据(使用keyAt()valueAt()方法)。Valuetruekey,即对应被选中的item

posted @ 2013-12-23 20:58  慕容渊  阅读(608)  评论(2)    收藏  举报