关于AlertDialog多选框中全选和反选的实现办法
package mobile.android.ch07.multi.choice.dialog; import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.SparseBooleanArray;
import android.view.View;
import android.widget.ListView; public class Main extends Activity {
private String[] provinces = new String[] { "辽宁省", "山东省", "河北省", "福建省", "广东省", "全选" };
private ListView lv = null;
private boolean[] state = new boolean[] { false, true, false, true, false, false }; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
} public void onClick_MultiChoiceDialog(View view) { final AlertDialog ad = new AlertDialog.Builder(this).setIcon(R.drawable.image).setTitle("选择省份")
.setMultiChoiceItems(provinces, state, new DialogInterface.OnMultiChoiceClickListener() {
public void onClick(DialogInterface dialog, int whichButton, boolean isChecked) { if (whichButton == 5 && isChecked) {
// lv.setItemChecked(0, true);
// lv.setItemChecked(1, true);
// lv.setItemChecked(2, true);
// lv.setItemChecked(3, true);
// lv.setItemChecked(4, true);
SparseBooleanArray sb;
sb = lv.getCheckedItemPositions();
// int size=sb.size();
for (int i = 0; i <= 5; i++) {
if (sb.get(i) == false) {
lv.setItemChecked(i, true);
}
}
} else if (whichButton == 5 && !isChecked) {
// state = new boolean[6];
for (int i = 0; i < state.length; i++) {
state<i> = false;
}
lv.clearChoices();
// lv.invalidate();
// ad.onContentChanged();
// SparseBooleanArray sb;
// sb = lv.getCheckedItemPositions();
// // int size=sb.size();
// for (int i = 0; i <= 5; i++) {
// if (sb.get(i) == true) {
// lv.setItemChecked(i, false);
// }
// }
System.out.println("");
}
}
}).setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
int count = lv.getCount();
String s = "您选择了:";
for (int i = 0; i < provinces.length; i++) { if (lv.getCheckedItemPositions().get(i))
s += i + ":" + lv.getAdapter().getItem(i) + " "; }
if (lv.getCheckedItemPositions().size() > 0) {
new AlertDialog.Builder(Main.this).setMessage(s).show();
} else {
new AlertDialog.Builder(Main.this).setMessage("您未选择任何省份").show(); } }
}).setNegativeButton("取消", null).create();
lv = ad.getListView();
ad.show();
}
}
这个是网友给出的办法,我按照这个办法,结果还是不能实现反选,每次点击反选,显示出来的条目都没有反选,只有往上滚动列表,之前隐藏的条目才显示为反选。
后来在反选遍历列表的时候加入lv.setItemChecked(i, false)就好了,可以正常显示为反选。
后来调试之后发现前面那样虽然可以正常显示,但是实际得到的列表的ture、false值有出入,重新修改了代码:
package mobile.android.ch07.multi.choice.dialog; import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.SparseBooleanArray;
import android.view.View;
import android.widget.ListView; public class Main extends Activity {
private String[] provinces = new String[] { "辽宁省", "山东省", "河北省", "福建省", "广东省", "全选" };
private ListView lv = null;
private boolean[] state = new boolean[] { false, true, false, true, false, false }; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
} public void onClick_MultiChoiceDialog(View view) { final AlertDialog ad = new AlertDialog.Builder(this).setIcon(R.drawable.image).setTitle("选择省份")
.setMultiChoiceItems(provinces, state, new DialogInterface.OnMultiChoiceClickListener() {
public void onClick(DialogInterface dialog, int whichButton, boolean isChecked) { if (whichButton == 5) {
for (int i = 0; i <= 5; i++) { lv.setItemChecked(i, isChecked);
state[i] = isChecked; }
}
}).setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
int count = lv.getCount();
String s = "您选择了:";
for (int i = 0; i < provinces.length; i++) { if (lv.getCheckedItemPositions().get(i))
s += i + ":" + lv.getAdapter().getItem(i) + " "; }
if (lv.getCheckedItemPositions().size() > 0) {
new AlertDialog.Builder(Main.this).setMessage(s).show();
} else {
new AlertDialog.Builder(Main.this).setMessage("您未选择任何省份").show(); } }
}).setNegativeButton("取消", null).create();
lv = ad.getListView();
ad.show();
}
}
关于AlertDialog多选框中全选和反选的实现办法的更多相关文章
- vue2.x中使用计算属性巧妙的实现多选框的“全选”
接下来我会以一个购物车的例子,来演示如果借助计算属性,精巧的实现多选框的全选功能.当然,有全选,自然对应的也还有取消全选. 以下这张gif图,就是最终的实现效果: 第一步,针对购物车每一个商品进行设置 ...
- js实现复选框的全选、全不选、反选
js中实现复选框的全选,全不选以及反选,分为两种情况: (1)选中“请选择”前面的复选框实现全选,不选中“请选择”前面的复选框实现全不选 <!DOCTYPE html PUBLIC " ...
- js做全选,用一个checkbox复选框做多个checkbox复选框的全选按钮,有一个复选框未被选择时,全选按钮的checked就为false
用一个checkbox复选框做多个checkbox复选框的全选按钮,有一个复选框未被选择时,全选按钮的checked就为false,当所有checkbox都被选中时,全选按钮也被选中. 详解: 有两种 ...
- 【jQuery】复选框的全选、反选,推断哪些复选框被选中
本文与<[JavaScript]复选框的全选.反选.推断哪些复选框被选中>(点击打开链接)为姊妹篇,把里面内容再与jQuery框架中实现一次,相同做到例如以下的效果: 布局还是相同的布局, ...
- 一天搞定jQuery(三)——使用jQuery完成复选框的全选和全不选
还记得之前我使用JavaScript来实现复选框的全选和全不选效果吗?如果读者初次翻阅本文,可记得看看教你一天玩转JavaScript(七)——使用JavaScript完成复选框的全选和全不选的效果! ...
- jQuery实现复选框的全选、反选、并且根据复选框的<checked属性>控制多个对应div的显示/隐藏
<!doctype html><html> <head> <meta charset="utf-8"> <title>j ...
- JQ实现复选框的全选反选不选
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- js实现复选框的全选、全不选和反选
js实现复选框的全选.全不选和反选 主要是用遍历的方法查找元素,然后通过改变checked的属性来选择,为true则是选中状态,为false则是未选状态 实现代码 <!DOCTYPE html& ...
- Vue复选框的全选
<!DOCTYPE html><html> <head> <meta charset="utf-8"> ...
随机推荐
- 操作系统OS - 常见系统的调度算法
https://en.wikipedia.org/wiki/Scheduling_(computing) 在wiki的下面可以找到
- 条件语句(if语句)的用法
if语句是实现分支结构的常用分支语句之一,另外还有条件运算符.switch语句等. if语句的功能是:根据给定条件,选择程序执行方向. if语句的基本格式 “if语句”又称条件语句,其基本格式为: ...
- PTA的Python练习题(三)
继续在PTA上编写Python的编程题. 从 第2章-11 求平方与倒数序列的部分和 开始 1. a,b=map(int,input().split()) s=0 while(a<=b): s= ...
- Java基础知识笔记第九章:组件及事件处理
java Swing 图形用户界面(GUI : Graphics User Interface) 窗口 JFrame常用方法 JFrame()创建一个无标题的窗口. JFrame(String s)创 ...
- nginx 的磁盘IO优化
磁盘IO优化的几个方面 优化读取 Sendfile 零拷贝.内存盘.SSD盘 减少写入 AIO 增大error_log级别的日志 关闭access_log 压缩access_log 是否启用prox ...
- JS闭包(2)
利用闭包的特点,我们可以在封装自己的模块的时候只向外暴露我们模块中的数据,而不让其修改. 1.第一中封装的方式,新建一个myModule.js文件,这个模块的作用是对外部提供明天和后天的天气. 在my ...
- python中numpy.concatenate()函数的使用
numpy库数组拼接np.concatenate 原文:https://blog.csdn.net/zyl1042635242/article/details/43162031 思路:numpy提供了 ...
- Spark教程——(7)编写spark-sql程序读取HBase定时生成报表
plugin划红线报错: maven-scala-plugin maven-shade-plugin 查找Maven仓库,发现一个没有jar包,一个jar包无法解压缩打开,删除Maven中坏的jar包 ...
- 帆软FineReport报表由于使用HTML显示后无法控制行高
问题:帆软FineReport报表由于使用HTML显示后无法控制行高. 原因:首先每行的第一个单元格是以HTML显示的,然后,数据库查询的数据集中,sql语句中包含这个代码:'<pre>' ...
- [NOI 2011]NOI 嘉年华
Description 题库链接 给你 \(n\) 个区间,让你选出其中一些分为两组,要求两组区间不能有交集,组内可以有交集.让你最大化两组之间区间个数较小的那一组的选取区间个数.以及对于每个区间 \ ...