关于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"> ...
随机推荐
- 关于自学java的内容及感受
这周自学了关于java输入的知识:java输入的方法与c++和c有些不同,他需要在开头加一个import连接系统的包,才能进行输入语句的编写. 自己编写了一点简单的输入的程序: package mod ...
- 腾讯云 docker 镜像 dotnet/core sdk aspnet
ccr.ccs.tencentyun.com/mcr.microsoft.com/dotnetcoresdk = mcr.microsoft.com/dotnet/core/sdk => 3 ...
- 最优矩阵连乘问题 区间DP
最优矩阵连乘积 Accepted: 10 Total Submit: 18Time Limit: 1000ms Memony Limit: 32768KB Description 在科学计算中经常要计 ...
- DBCP 数据源获取连接
Main package p1; import com.JdbcUtils; import org.apache.commons.dbcp.BasicDataSource; import org.ap ...
- 三种方式安装mariadb-10.3.18
安装环境:CentOS Linux release 7.5.1804 (Core) 一.yum安装 官方网站yum配置方法链接:https://mariadb.com/kb/en/library/yu ...
- uniGUI之MASK遮罩(22)
在页面进行后台数据库操作的时候,不想 用户再进行 页面上的 其他操作,这时候就要 将页面 遮罩.例如UniDBGrid有LoadMask属性. 1]使用ScreenMask函数 2]JS调用 3]一个 ...
- JavaScript图形实例:正多边形
圆心位于坐标原点,半径为R的圆的参数方程为 X=R*COS(θ) Y=R*SIN(θ) 在圆上取N个等分点,将这N个点首尾连接N条边,可以得到一个正N边形. 1.正多边形阵列 构造一个8行8列的正N( ...
- Windows驱动开发-IoCompleteRequest
IoCompleteRequest 例程表示调用者的已经完成了对指定I/O请求的所有处理操作,并且向I/O管理器返回指定的IRP报文. //函数原型 VOID IoCompleteRequest( I ...
- day15-Python运维开发基础(json序列化模块、random / time / zipfile / OS模块函数)
1. json序列化模块 # ### json """ 所有编程语言都能够识别的数据格式叫做json,是字符串 json: 将数据类型序列化成字符串 pickle:将数据 ...
- 【FastDev4Android框架开发】RecyclerView完全解析之下拉刷新与上拉加载SwipeRefreshLayout(三十一)
转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/49992269 本文出自:[江清清的博客] (一).前言: [好消息] ...