Android 中SettingsActivity(PreferenceFragmentCompat)的简单使用

news2024/11/27 5:35:17

如果你需要一个简单的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 {

    @Override
    protected 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);
        }
    }


    // 点击返回图标事件
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == android.R.id.home) {
            this.finish();
        }
        return super.onOptionsItemSelected(item);
    }

	// 接口Preference.OnPreferenceChangeListener
    public static class SettingsFragment extends PreferenceFragmentCompat implements Preference.OnPreferenceChangeListener {
        @Override
        public 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不保存
        @Override
        public 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.coloradmin.cn/o/940655.html

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

相关文章

一文教你如何防御数据库渗透入侵

前言 前段时间博主在做学校内部项目的时候,项目需要暂时上线测试,没想到上线测试几天,MySQL 数据库数据就被恶意删除,但是当时我们没有太当回事,以为只是一次普通黑客攻击,恢复数据之后仍然可以正常使用。…

『 LeetCode题解 』203. 移除链表元素

题目链接 : 『 LeetCode题解 』203. 移除链表元素 https://leetcode.cn/problems/remove-linked-list-elements/ 目录 🌟题目要求🌟解题思路(动图解析)🧐方案一😁方案二 🌟代码示列 &#x1f31…

海康机器人工业相机SDK MVS安装教程

文章目录 一. 海康机器人介绍二. 工业相机客户端安装教程 一. 海康机器人介绍 海康机器人是面向全球的机器视觉和移动机器人产品及解决方案提供商,业务聚焦于工业物联网、智慧物流和智能制造,构建开放合作生态,为工业和物流领域用户提供服务…

低代码平台如何改变软件开发?低代码平台是否能形成新生态?

低代码平台如何改变软件开发?低代码平台是什么?低代码平台又有什么样的独特价值?在如今的市场环境下,低代码平台又能展现出怎样的生机? 01 什么是低代码开发平台? 低代码开发平台是一种更偏向于赋能技术人…

监管机构新出台的会计法规将对阿里巴巴和其他中概股产生重大影响

来源:猛兽财经 作者:猛兽财经 监管机构出台了新的会计法规 猛兽财经获悉,为规范企业数据资源相关会计处理,强化相关会计信息披露,财政部于2023年8月21日制定并发布了《企业数据资源相关会计处理暂行规定》&#xff0c…

使用Python连接MySQL数据库并查找表信息

使用Python连接MySQL数据库并查找表信息 1.导入MySQLdb包 import MySQLdb如果你的PyCharm中没有MySQLdb,就从Setting-》Project Interpreter查找并下载 2.在MySQL中新建一个连接,取名为python ,再新建一个测试表,取名为examples…

FAQ包含哪些内容?

FAQ页面也叫常见问题解答页面,能够帮助回答客户有关你的产品和服务的常见问题,这不仅仅只是一个问题列表,通过解答页面,可以节约销售时间和服务成本,以及可能推动新用户购买。常见问题解答页面可以在整个采购过程中为客…

顺序表链表OJ题(2)->【数据结构】

W...Y的主页 😊 代码仓库分享 💕 前言: 单链表的结构常常不完美,没有双向链表那么”优秀“,所以繁衍出很多OJ练习题。今天我们继续来look look数据结构习题。 下面就是OJ时间!!! …

UEditorPlus v3.4.0 全新公式编辑体验,Logo全新发布

UEditor是由百度开发的所见即所得的开源富文本编辑器,基于MIT开源协议,该富文本编辑器帮助不少网站开发者解决富文本编辑器的难点。 UEditorPlus 是有 ModStart 团队基于 UEditor 二次开发的富文本编辑器,主要做了样式的定制,更符…

基于Java+SpringBoot+Vue前后端分离图书管理系统设计和实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

缓存一致性问题

在开发中我们为了提高查询效率,经常使用缓存(典型的缓存技术redis),但是在缓存的使用中我们经常遇到缓存和一致性问题(缓存的数据和数据库的数据不一致) 常见的解决方式 1.双写模式:更新数据库时候同时更新缓存 2.失效模式&#xff…

开源家政小程序源码仿58到家分享 带安装教程完整版

今天继续分享一个家政公司小程序源码系统,完全开源的,可以二次开发,支持多商家,直接在线预约,功能很是强大。 家政小程序源码系统是一款基于微信小程序平台的家政服务管理系统,旨在帮助家政服务公司更好地管…

C语言题目--2

CFLAGS“-Wall” 是将警告更多的显示出来 make ex1 会寻找ex1.c,然后去编辑它 需要编译Makefile,在执行make时,会在目录下寻找Makefile,根据定义去执行make hello是命名规则,下面是具体的命令 注意:用Tab键…

【FreeRTOS】【应用篇】消息队列【上篇】——队列基本概念、创建和删除

文章目录 前言一、什么是消息队列,有什么用1. 概念2. 作用3. 特点 二、消息队列的深入原理1. 消息队列的存储结构2. 出入队列的相关操作① 入队操作:② 发送紧急消息:③ 读取队列操作: 3. 关于队列的阻塞机制① 读操作的阻塞机制&…

checkstyle检查Java编程样式:空格检查

一个空行不能有空格 例如,第22行是空行,有4个空格,checkstyle检查报错: 将4个空格删掉,checkstyle检查通过: 行末尾不能有空格 将行末尾的空格删掉即可消除这个违反项: 用WhitespaceAfte…

驱动作业,按键中断阻塞LED灯

驱动程序 #include "head.h" #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/uaccess.h> #include <linux/io.h> #include <linux/device.h> #include <linux/export.h> #in…

抖音转化率是什么意思,怎么计算,如何提升效果?

抖音转化率是指在抖音平台上进行某种特定行为的用户数量与总用户数量之间的比率。作为短视频搜索领域的最大平台&#xff0c;抖音转化率一直是企业用户的攻克难题。 茹莱神兽认为&#xff0c;想要提升抖音的转化率&#xff0c;就需要研究它的转化路径。常见的转化行为包括点击…

Java Predicate用法

Java Predicate用法 无需写sql.只要拼接条件就行 Java Predicate用法

未来智造:珠三角引领人工智能产业集群

原创 | 文 BFT机器人 产业集群是指产业或产业群体在地理位置上集聚的现象&#xff0c;产业集群的研究对拉动区域经济发展&#xff0c;提高区域产业竞争力具有重要意义。 从我国人工智能产业集群形成及区域布局来看&#xff0c;我国人工智能产业发展主要集聚在京津冀、长三角、…

澳大利亚以及美国纽扣电池新标准讲解!

一、什么是澳大利亚纽扣电池认证标准&#xff1f; 答&#xff1a;近期很多商家的产品无论是成品还是单独的纽扣电池&#xff0c;只要成品中带有纽扣的电池的功能都是需要办理澳洲的认证的&#xff0c;最近抽查的比较严格&#xff0c;因为电池测试这方面是为降低与使用纽扣电池相…