Android 中SettingsActivity(PreferenceFragmentCompat)的简单使用

如果你需要一个简单的APP设置,可以使用sharedPreferences进行存储,我们可以借助AndroidStudio快速创建一个用于设置的Activity,其实它是继承PreferenceFragmentCompat,存储方式用的就是sharedPreferences,只是帮我们节省了很多操作
 

1.新建SettingsActivity

使用AS新建一个SettingsActivity

 可以发现它自动生成了一个Activity、一个layout布局和一个xml文件

 layout文件很简单,里面就是一个LinearLayout里套FrameLayout,我们不用去修改它
xml文件是使用PreferenceScreen的布局文件,在自动生成Activity文件里的SettingsFragment类引用该xml

2.xml
它默认生成的是root_preferences.xml,里面是PreferenceScreen布局,关于PreferenceScreen 的布局大家可以去网上搜一下,或者去官网看看说明,我这里只是简单举个例子

title:显示的标题
key:存储的键(sharedPreferences取值需要用)
dependency:是否依赖某个组件,被依赖组件启用则当前组件启用
icon:图标
summary:描述
fragment:嵌套fragment(多级页面)
useSimpleSummaryProvider:是否显示值内容

 

3.Activity监听校验

如果修改了设置可以进行保存,我们需要实现Preference.OnPreferenceChangeListener才能监听改变,比如说校验输入值的合法性


 

public class SettingsActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.settings_activity);if (savedInstanceState == null) {getSupportFragmentManager().beginTransaction().replace(R.id.settings, new SettingsFragment()).commit();}ActionBar actionBar = getSupportActionBar();if (actionBar != null) {actionBar.setTitle("设置");actionBar.setDisplayHomeAsUpEnabled(true);}}// 点击返回图标事件@Overridepublic boolean onOptionsItemSelected(MenuItem item) {if (item.getItemId() == android.R.id.home) {this.finish();}return super.onOptionsItemSelected(item);}// 接口Preference.OnPreferenceChangeListenerpublic static class SettingsFragment extends PreferenceFragmentCompat implements Preference.OnPreferenceChangeListener {@Overridepublic void onCreatePreferences(Bundle savedInstanceState, String rootKey) {setPreferencesFromResource(R.xml.root_preferences, rootKey);// 通过xml设置的key找到要监听的项Preference sPEditUsername = findPreference("username");Preference sPEditPassword = findPreference("password");// 设置监听if (sPEditUsername != null) {sPEditUsername.setOnPreferenceChangeListener(this);}if (sPEditPassword != null) {sPEditPassword.setOnPreferenceChangeListener(this);}}// 值发生改变时触发,return值决定是否保存修改,true保存,false不保存@Overridepublic boolean onPreferenceChange(Preference preference, Object newValue) {String key = preference.getKey();if (key.equals("username")) {...return true;  // 保存} else if (key.equals("password")) {...return true;}return false;  //不保存}
}

 采用的是sharedPreferences的存储方式,所以取值还是很简单的

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
boolean spIsAuth = sharedPreferences.getBoolean("is_auth", false);  // 第一个参数是key,第二个是根据key取不到值时的默认值
String spUsername = sharedPreferences.getString("username", "");
String spPassword = sharedPreferences.getString("password", "");

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/66122.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

科技资讯|微软获得AI双肩包专利,Find My防丢背包大火

根据美国商标和专利局(USPTO)近日公示的清单,微软于今年 5 月提交了一项智能双肩包专利,其亮点在于整合了 AI 技术,可以识别佩戴者周围环境、自动响应用户聊天请求、访问基于云端的信息、以及和其它设备交互。 在此附…

创建ffmpeg vs2019工程

0 写在前面 本文主要参考链接:https://www.cnblogs.com/suiyek/p/15669562.html 感谢作者的付出; 1 目录结构 2 下载yasm和nasm 如果自己在安装VS2019等IDE的时候已经安装了它们,则不用再单独进行安装,比如我这边已经安装了&a…

wget 命令的使用:HTTP文件下载、FTP文件下载--九五小庞

1. wget 命令简介与安装wget是用于在命令行终端下载网络文件的开源免费的命令工具,支持 HTTP/HTTPS、FTP/FTPS 协议的下载。wget 与 curl 相似,curl 可以理解为是一个浏览器,wget 则可以理解是迅雷。wget 意为 World Wide Web 与 get 的结合。…

【VirtualBox】安装Ubuntu

一、新建虚拟系统 点击新建 输入名称,点击下一步 配置内存大小和处理器,点击下一步 选择不添加虚拟硬盘,点击下一步 点击完成 点击继续 二、修改虚拟机硬件配置 选择虚拟机,点击 “设置” 进入 “系统 -> 主板” 页面&…

Day02 - Java基础语法

1. 注释 注释是对代码的解释和说明文字。 Java中的注释分为三种: 单行注释: // 这是单行注释文字 多行注释: /* 这是多行注释文字 这是多行注释文字 这是多行注释文字 */ 注意:多行注释不能嵌套使用。 文档注释(…

ZZULIOJ 1164: 字符串加密,Java

ZZULIOJ 1164: 字符串加密,Java 题目描述 输入一串字符(长度不超过100)和一个正整数k,将其中的英文字母加密并输出加密后的字符串,非英文字母不变。加密思想:将每个字母c加一个序数k,即用它后…

【计算机组成 课程笔记】1.2 冯·诺伊曼结构

课程链接: 计算机组成_北京大学_中国大学MOOC(慕课) 1 - 2 - 102-冯诺依曼结构的要点(13-59--)_哔哩哔哩_bilibili 现代的计算机形态各异,但究其本质,几乎全部采用了冯诺依曼结构。要了解计算机,首先要知道…

数据挖掘导论学习笔记1(第1 、2章)

参考:https://blog.csdn.net/u013232035/article/details/48281659?spm1001.2014.3001.5506 和《数据挖掘导论》学习笔记(第1-2章)_时机性样本_schdut的博客-CSDN博客 第1章 绪论 数据挖掘是一种技术,它将传统的数据分析方法…

14 mysql bit/json/enum/set 的数据存储

前言 这里主要是 由于之前的一个 datetime 存储的时间 导致的问题的衍生出来的探究 探究的主要内容为 int 类类型的存储, 浮点类类型的存储, char 类类型的存储, blob 类类型的存储, enum/json/set/bit 类类型的存储 本文主要 的相关内容是 bit/json/enum/set 类类型的相关…

android:新建工程文件介绍

一、前言当我们新建一个app时会呈现出固定的工程文件,这篇文章介绍新建工程里的文件。 二、介绍 Structure:就是你选择哪个页面就会显示那个页面的结构,就比如说我选择的是MainActivity他就会显示这个页面所使用的方法。 1-2:是android自动生…

环上计数+计数转概率:ABC318EX

https://atcoder.jp/contests/abc318/tasks/abc318_h 先转为概率, f i f_i fi​ 表示 i i i 个点两人都AC的概率, g i g_i gi​ 表示恰好一个人AC的概率。 两个人都AC,只能为全部自环, f i 1 i ! f_i\frac 1 {i!} fi​i!1​ …

C++/C# : C#和C++的不同

C#和C是两种不同的编程语言,虽然在某些方面它们具有相似之处,但它们也有一些明显的不同点,如下: C是一种静态类型编程语言,而C#是一种动态类型编程语言。 C允许开发者手动管理内存的分配和释放,但是C#的垃…

Navicat15天试用期过期解决办法

如果你是windows电脑,发现过期了先把Nvaicat关掉,按照以下步骤可以恢复到15天试用。 1.注册表输入regedit winR打开注册表 2.搜索输入HKEY_CURRENT_USER\Software\PremiumSoft\Navicat 删除Registration15XCS和Update这两个文件夹。 3.搜索HKEY_CURRE…

【Jenkins打包服务,Dockerfile报错:manifest for java : 8 not fourd】

1、问题描述 Jenkins打包服务运行dockerfile里的FROM java:8报错manifest for java : 8 not fourd Caused by: com.spotify. docker.client.exceptions.DockerException: manifest for java:8 not found2、解决方法 在网上查找许多方法后得出这是由于Docker官方已经弃用java…

【kubernetes】k8s部署APISIX及在KubeSphere使用APISIX

Apache APISIX https://apisix.apache.org/ 功能比nginx-ingress更强 本文采用2.5.0版本 https://apisix.apache.org/zh/docs/apisix/2.15/getting-started/ 概述内容来源于官方,学习于马士兵云原生课程 概述 Apache APISIX 是什么? Apache APISIX 是 …

r 安装源码包 安装本地r包

总结一下手动安装R包 - 简书 (jianshu.com)https://www.jianshu.com/p/2a7a36414734 #BiocManager::install("simplifyEnrichment") #BiocManager::install("EnsDb.Hsapiens.v86")#下载包 之后 手动安装 #install.packages("~/datasets/EnsDb.Hsapien…

前端入门到入土?

文章目录 前言http和https的区别,https加密的原理是?区别https的加密原理 TCP为什么要三次握手?proxy代理的原理?内存泄漏?什么是内存泄漏?为什么会有内存泄漏?内存泄漏的情况?如何防…

PAT 1163 Dijkstra Sequence

个人学习记录,代码难免不尽人意。 Dijkstra’s algorithm is one of the very famous greedy algorithms. It is used for solving the single source shortest path problem which gives the shortest paths from one particular source vertex to all the other v…

关于MySQL数据库版本不同导致表进行比较的时候报错illegal mix of collations...的问题

问题发生的原委 之前在项目开发的时候,我本地也建立了数据库用作开发库,我本地的数据库版本是5.7的,但是测试和生产库都是8.0的版本,我们定义的数据库字符集是utf8mb4,排序规则是utf8mb4_general_ci,前段时…

数据库连接报错CannotGetJdbcConnectionException: Failed to obtain JDBC Connection

数据库连接报错CannotGetJdbcConnectionException: Failed to obtain JDBC Connection 报错信息 [Namecom.primeton.esb.online.restaurant.ms.online.mediaService.mediaService.biz][activity nameJDBC调用][activity idinvokePojo9] throw an exception:java.lang.Excepti…