【Android】PreferenceFragment「建议收藏」

【Android】PreferenceFragment「建议收藏」调用PreferenceFragment类出错,用了我三天时间才搞定,查官方文档,看百度最后在这位大佬的帖子帮助下终于搞定了。https://blog.csdn.net/cqx13763055264/article/details/78498419#commentBoxPreferenceActivity创建和使用比较复杂,Android官方现在不建议使用了,使用Preferenc…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

【Android】PreferenceFragment「建议收藏」

调用PreferenceFragment类出错,用了我三天时间才搞定,查官方文档,看百度

最后在这位大佬的帖子帮助下终于搞定了。

https://blog.csdn.net/cqx13763055264/article/details/78498419#commentBox

PreferenceActivity创建和使用比较复杂,Android官方现在不建议使用了,使用Preference和fragment的结合更加便利地写出一个settings页面,下面来介绍PreferenceScreen和fragment结合方法

当然看个官方文档我也受益匪浅

1.导包问题

由于很多都被弃用了,我先找到了PreferenceFragmentCompat

【Android】PreferenceFragment「建议收藏」

通过选择Guide这个可以进入查看详细的sample

【Android】PreferenceFragment「建议收藏」

【Android】PreferenceFragment「建议收藏」

【Android】PreferenceFragment「建议收藏」

【Android】PreferenceFragment「建议收藏」左侧这边可以看一下特性

https://developer.android.com/reference/android/support/v7/preference/PreferenceFragmentCompat.html

这里会指明添加gradel依赖项

【Android】PreferenceFragment「建议收藏」

在gradel.builder中加入支持库

//implementation 'com.android.support:preference-v7:28.0.0-alpha1'

下面正式开始

1:文件的结构是:一个MainActivity,一个对应layout布局,一个可引入的XML碎片布局

【Android】PreferenceFragment「建议收藏」

2.具体内容

2.1 【settingsfragment.xml 】  一个布局碎片 使用<PreferenceScreen>标签作为最外层包裹,写好不用管了供以后调用

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <Preference
            android:key="clear_cache"
            android:title="清除缓存"/>
    <SwitchPreference
            android:key="push"
            android:title="推送通知"/>
    <SwitchPreference
            android:key="no_wifi"
            android:title="非wifi下加载图片"/>
    <Preference
            android:key="about"
            android:title="关于"/>
</PreferenceScreen>

2.21使用刚开始创建一个的MainActivity

package com.ywjh.settingsbyprenference;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;


import android.os.Bundle;
import android.preference.PreferenceFragment;

/*主类中打开layout布局,其中layout会以class方式调用下面的类并打开其引用的xml块*/
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
/*在主类添加一个静态类继承Preferencement  实现oncreate和 addPreferencesFromResource调用xml布局*/
    public static class SettingsFragment extends PreferenceFragment {
        @Override
        public void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.settingsfragment);
        }


    }
}

2.21更新 由于Preference被弃用了 使用androidx包下的方法也是种很好的选择,实现方法更精简了 当然最好是使用PreferenceFragmentCompat方法,后续有时间再更新吧

package com.ywjh.settingsbyprenference;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;


import android.os.Bundle;
import androidx.preference.PreferenceFragment;


public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public static class SettingsFragment extends PreferenceFragment {
//        @Override
//        public void onCreate(@Nullable Bundle savedInstanceState) {
//            super.onCreate(savedInstanceState);
//            addPreferencesFromResource(R.xml.settingsfragment);
//        }

        @Override
        public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
            addPreferencesFromResource(R.xml.settingsfragment);
        }


    }
}

 

2.22实现需要调用的layout布局【activity_main.xml】 并且将之前写好的关于Preference的xml布局以fragment布局添加进来

通过 android:name表面完成主类-》实现类

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <fragment
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/settingsFragment"
            android:name="com.ywjh.settingsbyprenference.MainActivity$SettingsFragment"/>

</androidx.constraintlayout.widget.ConstraintLayout>

 

实测不加id会报错,补上就完成啦

【Android】PreferenceFragment「建议收藏」

【Android】PreferenceFragment「建议收藏」

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/197778.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • php curl get_python curl

    php curl get_python curl一条命令apt-getinstallphp-curl

    2022年8月30日
  • cmd批处理命令~%dp0与~%dpn1的解析

    cmd批处理命令~%dp0与~%dpn1的解析1、最简单的做法是在cmd命令输入:for/?,回车,就能看到详细的解析对一组文件中的每一个文件执行某个特定命令。FOR%variableIN(set)DOcommand[command-parameters]%variable指定一个单一字母可替换的参数。(set)指定一个或一组文件。可以使用通配符。command指定对每个文件执行的命令。…

    2022年9月16日
  • web安全笔记_web攻防之业务安全实战指南

    web安全笔记_web攻防之业务安全实战指南writeinmydormitoryat‏‎9:47:05Friday,April7,2017bygiantbranch(一个当初想横跨web跟二进制的菜鸡)————致即将毕业的自己。这是我的安全之路系列第一篇,敬请期待第二篇:《我的安全之路——二进制与逆向篇》总览大一:基本都在学习学校的课程,C语言,C++,高数啊,不过分数还可以,在大一复习周还在php3小时光速入门呢大二

    2022年9月20日
  • 戴尔服务器的远程开机和关机

    戴尔服务器的远程开机和关机手上有一台戴尔的DELLPowerEdgeR210服务器,闲来无事,研究了一下它的远程开机和关机。Dell的服务器默认都带BMC,这个用来做管理的网口和操作系统是共用的同一个网口(注意必需是第一个网口,即服务器上标有1的那个),只要BMC里设置的IP地址和操作系统的IP不一样就可以了。BMC的设置很简单,按以下步骤进行设置:1、在服务器启动时看到Press<Ct…

    2022年5月16日
  • 字符串匹配(多模式匹配篇)「建议收藏」

    字符串匹配(多模式匹配篇)「建议收藏」字符串匹配(多模式匹配篇)摘要:问题的提出:众所周知,KMP算法在O(n)的时间中solve单模式串匹配问题。但怎样solve多模式串匹配问题呢?Solve:本文用简要记叙了使用trie树,trie图(AC自动机)solve该问题的方法。关键字:字符串,多模式串匹配,trie树,trie图,AC自动机。前言:KMP算法是一种极其优秀的单模式串匹配算法,它通过前缀函数fail来减少匹配次数,以达到O…

    2022年8月21日
  • Socat虚拟pty

    命令:socatptypty问题:从pty1到pty2的数据,也会被pty1所接收。

    2022年4月6日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号