Android ListView+CheckBox实现全选、单选

本文是使用listView+checkBox来实现全选、单选。

全选:点击全选按钮将所有item进行选中。
单选:点击任意一个ite进行选择,每次点击都会将其他item的选中状态置为false。

首先是布局代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
   >

    <Button
        android:id="@+id/btn_all"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:text="全    选"
        android:textColor="@android:color/black"
        android:textSize="16sp" />

    <ListView
        android:id="@+id/lv_listView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:layout_below="@+id/btn_all">
    </ListView>

</RelativeLayout>

ListCheckBoxActivity :

public class ListCheckBoxActivity extends Activity {

    ListView lv_listView;
    Button btn_all;
    List<IsSeclect> dataIsSeclect = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_checkbox);

        lv_listView = (ListView) findViewById(R.id.lv_listView);
        btn_all = (Button) findViewById(R.id.btn_all);
        initData();
        initAdapter();

    }

    /**
     * 初始化数据
     */
    private void initData() {
        dataIsSeclect = new ArrayList<IsSeclect>();
        //使用for循环保存一些假数据
        for (int i = 0; i < 10; i++) {
            IsSeclect isSeclect = new IsSeclect();
            isSeclect.setSeclect(false);
            dataIsSeclect.add(isSeclect);
        }
    }

    /**
     * listView的adapter
     */
    private void initAdapter() {
        final MyAdapter myAdapter = new MyAdapter(this);
        myAdapter.setDatas(dataIsSeclect);
        lv_listView.setAdapter(myAdapter);

        lv_listView.setOnItemClickListener(new OnItemClickListener() {
            int currentNum = -1;

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {

                for (IsSeclect isSeclect : dataIsSeclect) {
                    isSeclect.setSeclect(false);
                }

                if (currentNum == -1) { // 选中
                    dataIsSeclect.get(position).setSeclect(true);
                    currentNum = position;
                } else if (currentNum == position) { // 同一个item选中变未选中
                    for (IsSeclect isSeclect : dataIsSeclect) {
                        isSeclect.setSeclect(false);
                    }
                    currentNum = -1;
                } else if (currentNum != position) { // 不是同一个item选中当前的,去除上一个选中的
                    for (IsSeclect isSeclect : dataIsSeclect) {
                        isSeclect.setSeclect(false);
                    }
                    dataIsSeclect.get(position).setSeclect(true);
                    currentNum = position;
                }

                myAdapter.notifyDataSetChanged();

            }

        });

        // 全选
        btn_all.setOnClickListener(new OnClickListener() {
            int curNum = -1;

            @Override
            public void onClick(View arg0) {
                if (curNum == -1) {
                    for (IsSeclect isSeclect : dataIsSeclect) {
                        isSeclect.setSeclect(true);
                    }
                    curNum = 0;
                } else if (curNum == 0) {
                    for (IsSeclect isSeclect : dataIsSeclect) {
                        isSeclect.setSeclect(false);
                    }
                    curNum = -1;
                }
                myAdapter.notifyDataSetChanged();

            }
        });
    }

}

IsSeclect :

/**
 * listView选择的checkBook实体类
 * @author m.xang
 *
 */
public class IsSeclect {
    boolean isSeclect;

    public IsSeclect() {

    }

    public void setSeclect(boolean isSeclect) {
        this.isSeclect = isSeclect;
    }

    public boolean getSeclect() {
        return isSeclect;
    }
}

贴张效果图:
全选

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值