大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
调用PreferenceFragment类出错,用了我三天时间才搞定,查官方文档,看百度
最后在这位大佬的帖子帮助下终于搞定了。
https://blog.csdn.net/cqx13763055264/article/details/78498419#commentBox
PreferenceActivity创建和使用比较复杂,Android官方现在不建议使用了,使用Preference和fragment的结合更加便利地写出一个settings页面,下面来介绍PreferenceScreen和fragment结合方法
当然看个官方文档我也受益匪浅
1.导包问题
由于很多都被弃用了,我先找到了PreferenceFragmentCompat
通过选择Guide这个可以进入查看详细的sample
左侧这边可以看一下特性
https://developer.android.com/reference/android/support/v7/preference/PreferenceFragmentCompat.html
这里会指明添加gradel依赖项
在gradel.builder中加入支持库
//implementation 'com.android.support:preference-v7:28.0.0-alpha1'
下面正式开始
1:文件的结构是:一个MainActivity,一个对应layout布局,一个可引入的XML碎片布局
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会报错,补上就完成啦
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/197778.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...