这里是您需要的所有代码!

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多选的简单方法?相关推荐

  1. android如何自定义dialog,Android—自定义Dialog

    在 Android 日常的开发中,Dialog 使用是比较广泛的.无论是提示一个提示语,还是确认信息,还是有一定交互的(弹出验证码,输入账号密码登录等等)对话框. 而我们去看一下原生的对话框,虽然随着 ...

  2. JAVA中创建线程池的五种方法及比较

    之前写过JAVA中创建线程的三种方法及比较.这次来说说线程池. JAVA中创建线程池主要有两类方法,一类是通过Executors工厂类提供的方法,该类提供了4种不同的线程池可供使用.另一类是通过Thr ...

  3. php怎么在线建excel,PHP中创建和编辑Excel表格的方法

    PHP中创建和编辑Excel表格的方法 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  PHP中创建和编辑Excel表格的方法.txt ] (友情提示:右键点上行 ...

  4. Linux中创建Daemon进程的三种方法

    Linux中创建Daemon进程的三种方法 什么是daemon进程? Unix/Linux中的daemon进程类似于Windows中的后台服务进程,一直在后台运行运行,例如http服务进程nginx, ...

  5. linux 函数 创建文件路径,linux中创建文件和文件夹的方法

    linux中创建文件和文件夹的方法 发布时间:2020-06-12 19:32:19 来源:亿速云 阅读:174 作者:鸽子 首先说一下touch 创建文件的命令,touch可以用于创建二进制文件,用 ...

  6. 我的世界服务器自动被踢怎么可以进去,我的世界中国版服务器中如何解决玩家作弊的简单方法...

    原标题:我的世界中国版服务器中如何解决玩家作弊的简单方法 我的世界中国版,作弊是件可耻的行为,可能有很多玩家遇到了其他玩家在游戏中作弊,那么我们应该如何解决这个问题?今天就由超好玩小编来告诉大家我的世 ...

  7. android studio 自定义字体,Android Studio中的自定义字体

    如何在android studio中创建自定义字体? 我试图使用自定义字体,我读过,我想将字体放在资产/字体. 我已经搜索了很长时间,但很难找到帮助. 我哪里错了?我真的不知道该怎么做. 我写下了所有 ...

  8. android sqlite 自定义路径,SQLite数据库创建时自定义路径

    前言 在新建数据库sqlite的时候,我们已经知道了数据库默认路径为 /data/data/com.example.pei.textdemo/databases/test_demo.db 那么,如果我 ...

  9. android mimetype 自定义,认识安卓中的MIME Type

    MIME type的缩写为(Multipurpose Internet Mail Extensions)代表互联网媒体类型(Internet media type),MIME使用一个简单的字符串组成, ...

  10. android sqlite自定义函数,Android中自定义一个View的方法详解

    本文实例讲述了Android中自定义一个View的方法.分享给大家供大家参考,具体如下: Android中自定义View的实现比较简单,无非就是继承父类,然后重载方法,即便如此,在实际编码中难免会遇到 ...

最新文章

  1. windows10 查看 nvidia driver cuda 版本
  2. 【C语言】21-结构体
  3. python编程软件开发_Python编程对软件开发人员很重要?
  4. Remoting实例(同为客户端服务端)
  5. asp.net添加删除表格_如何用openpyxl自动化编写Excel电子表格
  6. 小白学数据:教你用Python实现简单监督学习算法
  7. python 多条件 选择 算法_python部署python算法 - 快速寻找满足条件的两个数
  8. 计算机网络之网络层:6、IPv6
  9. android+警告声音,android – 如何使用带有setAudioAttributes的警报音量播放铃声?
  10. jni 调用sock_raw -- 端口扫描
  11. 【论文阅读】Deep Residual Learning for Image Recognition
  12. 超详细汇总21个mysql优化实践【收藏版MySQL优化】
  13. 商城购物车php代码,php网上商城购物车设计代码
  14. Presto SQL 时间日期函数
  15. 黄山市区到黄山风景区有多远,如何到黄山景区
  16. 在cmd的命令下 用Mysql中建立一个表
  17. 玩转小黑框!Terminal 入门到进阶,最后放弃!
  18. Java语言高级-常用API-第四节 ArrayList集合
  19. 微信语音技术原理_微信语音电话是如何实现的?
  20. 《千与千寻》与《天空之城》配色分享

热门文章

  1. 第29章 跨战区大PK
  2. 关于商标无效宣告,看这篇文章就够了
  3. TPS23753A-3.3V,5.0V,12V设计已验证
  4. lol提示游戏环境异常重启计算机,msoffice系统工具教程lol游戏环境异常请重启机器该怎么办...
  5. 实验一_调试程序DEBUG
  6. 阴阳师服务器维护2.11,[公告] 《阴阳师》2月11日正式服维护详情
  7. 基于django奶茶店管理系统
  8. 骁龙660是32位还是64位_骁龙660与骁龙665,数字差个5实际区别到底有多大
  9. 计算机技术流浪地球,玩商时代观察:《流浪地球》原著作者刘慈欣:计算机技术是个坑!...
  10. Vue项目设置局域网访问方法