android listpreference 自定义,在Android中创建ListPreference多选的简单方法?
这里是您需要的所有代码!
public class ListPreferenceMultiSelect extends ListPreference {
//Need to make sure the SEPARATOR is unique and weird enough that it doesn't match one of the entries.
//Not using any fancy symbols because this is interpreted as a regex for splitting strings.
private static final String SEPARATOR = "OV=I=XseparatorX=I=VO";
private boolean[] mClickedDialogEntryIndices;
public ListPreferenceMultiSelect(Context context, AttributeSet attrs) {
super(context, attrs);
mClickedDialogEntryIndices = new boolean[getEntries().length];
}
@Override
public void setEntries(CharSequence[] entries) {
super.setEntries(entries);
mClickedDialogEntryIndices = new boolean[entries.length];
}
public ListPreferenceMultiSelect(Context context) {
this(context, null);
}
@Override
protected void onPrepareDialogBuilder(Builder builder) {
CharSequence[] entries = getEntries();
CharSequence[] entryValues = getEntryValues();
if (entries == null || entryValues == null || entries.length != entryValues.length) {
throw new IllegalStateException(
"ListPreference requires an entries array and an entryValues array which are both the same length");
}
restoreCheckedEntries();
builder.setMultiChoiceItems(entries, mClickedDialogEntryIndices,
new DialogInterface.OnMultiChoiceClickListener() {
public void onClick(DialogInterface dialog, int which, boolean val) {
mClickedDialogEntryIndices[which] = val;
}
});
}
public static String[] parseStoredValue(CharSequence val) {
if ("".equals(val))
return null;
else
return ((String)val).split(SEPARATOR);
}
private void restoreCheckedEntries() {
CharSequence[] entryValues = getEntryValues();
String[] vals = parseStoredValue(getValue());
if (vals != null) {
for (int j=0; j
String val = vals[j].trim();
for (int i=0; i
CharSequence entry = entryValues[i];
if (entry.equals(val)) {
mClickedDialogEntryIndices[i] = true;
break;
}
}
}
}
}
@Override
protected void onDialogClosed(boolean positiveResult) {
// super.onDialogClosed(positiveResult);
CharSequence[] entryValues = getEntryValues();
if (positiveResult && entryValues != null) {
StringBuffer value = new StringBuffer();
for (int i=0; i
if (mClickedDialogEntryIndices[i]) {
value.append(entryValues[i]).append(SEPARATOR);
}
}
if (callChangeListener(value)) {
String val = value.toString();
if (val.length() > 0)
val = val.substring(0, val.length()-SEPARATOR.length());
setValue(val);
}
}
}
}
android listpreference 自定义,在Android中创建ListPreference多选的简单方法?相关推荐
- android如何自定义dialog,Android—自定义Dialog
在 Android 日常的开发中,Dialog 使用是比较广泛的.无论是提示一个提示语,还是确认信息,还是有一定交互的(弹出验证码,输入账号密码登录等等)对话框. 而我们去看一下原生的对话框,虽然随着 ...
- JAVA中创建线程池的五种方法及比较
之前写过JAVA中创建线程的三种方法及比较.这次来说说线程池. JAVA中创建线程池主要有两类方法,一类是通过Executors工厂类提供的方法,该类提供了4种不同的线程池可供使用.另一类是通过Thr ...
- php怎么在线建excel,PHP中创建和编辑Excel表格的方法
PHP中创建和编辑Excel表格的方法 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: PHP中创建和编辑Excel表格的方法.txt ] (友情提示:右键点上行 ...
- Linux中创建Daemon进程的三种方法
Linux中创建Daemon进程的三种方法 什么是daemon进程? Unix/Linux中的daemon进程类似于Windows中的后台服务进程,一直在后台运行运行,例如http服务进程nginx, ...
- linux 函数 创建文件路径,linux中创建文件和文件夹的方法
linux中创建文件和文件夹的方法 发布时间:2020-06-12 19:32:19 来源:亿速云 阅读:174 作者:鸽子 首先说一下touch 创建文件的命令,touch可以用于创建二进制文件,用 ...
- 我的世界服务器自动被踢怎么可以进去,我的世界中国版服务器中如何解决玩家作弊的简单方法...
原标题:我的世界中国版服务器中如何解决玩家作弊的简单方法 我的世界中国版,作弊是件可耻的行为,可能有很多玩家遇到了其他玩家在游戏中作弊,那么我们应该如何解决这个问题?今天就由超好玩小编来告诉大家我的世 ...
- android studio 自定义字体,Android Studio中的自定义字体
如何在android studio中创建自定义字体? 我试图使用自定义字体,我读过,我想将字体放在资产/字体. 我已经搜索了很长时间,但很难找到帮助. 我哪里错了?我真的不知道该怎么做. 我写下了所有 ...
- android sqlite 自定义路径,SQLite数据库创建时自定义路径
前言 在新建数据库sqlite的时候,我们已经知道了数据库默认路径为 /data/data/com.example.pei.textdemo/databases/test_demo.db 那么,如果我 ...
- android mimetype 自定义,认识安卓中的MIME Type
MIME type的缩写为(Multipurpose Internet Mail Extensions)代表互联网媒体类型(Internet media type),MIME使用一个简单的字符串组成, ...
- android sqlite自定义函数,Android中自定义一个View的方法详解
本文实例讲述了Android中自定义一个View的方法.分享给大家供大家参考,具体如下: Android中自定义View的实现比较简单,无非就是继承父类,然后重载方法,即便如此,在实际编码中难免会遇到 ...
最新文章
- windows10 查看 nvidia driver cuda 版本
- 【C语言】21-结构体
- python编程软件开发_Python编程对软件开发人员很重要?
- Remoting实例(同为客户端服务端)
- asp.net添加删除表格_如何用openpyxl自动化编写Excel电子表格
- 小白学数据:教你用Python实现简单监督学习算法
- python 多条件 选择 算法_python部署python算法 - 快速寻找满足条件的两个数
- 计算机网络之网络层:6、IPv6
- android+警告声音,android – 如何使用带有setAudioAttributes的警报音量播放铃声?
- jni 调用sock_raw -- 端口扫描
- 【论文阅读】Deep Residual Learning for Image Recognition
- 超详细汇总21个mysql优化实践【收藏版MySQL优化】
- 商城购物车php代码,php网上商城购物车设计代码
- Presto SQL 时间日期函数
- 黄山市区到黄山风景区有多远,如何到黄山景区
- 在cmd的命令下 用Mysql中建立一个表
- 玩转小黑框!Terminal 入门到进阶,最后放弃!
- Java语言高级-常用API-第四节 ArrayList集合
- 微信语音技术原理_微信语音电话是如何实现的?
- 《千与千寻》与《天空之城》配色分享
热门文章
- 第29章 跨战区大PK
- 关于商标无效宣告,看这篇文章就够了
- TPS23753A-3.3V,5.0V,12V设计已验证
- lol提示游戏环境异常重启计算机,msoffice系统工具教程lol游戏环境异常请重启机器该怎么办...
- 实验一_调试程序DEBUG
- 阴阳师服务器维护2.11,[公告] 《阴阳师》2月11日正式服维护详情
- 基于django奶茶店管理系统
- 骁龙660是32位还是64位_骁龙660与骁龙665,数字差个5实际区别到底有多大
- 计算机技术流浪地球,玩商时代观察:《流浪地球》原著作者刘慈欣:计算机技术是个坑!...
- Vue项目设置局域网访问方法