折腾:
【未解决】rcsjta项目编译出错:警告deprecation PreferenceActivity中的getPreferenceScreen()已过时
期间,突然想到:
去找找 这几个类的演化历史
android PreferenceActivity PreferenceFragment PreferenceFragmentCompat
项目中经常需要用到设置(Setting),在安卓中主要使用
- android.preference.PreferenceFragment
- 在Android API 28中PreferenceFragment已经过时
- 推荐使用PreferenceFragmentCompat
- android.support.v7.preference.PreferenceFragmentCompat
所以现在问题转换为:
如何用PreferenceFragmentCompat去实现tts的配置界面
有参考代码实现
android PreferenceFragmentCompat
注意:本指南介绍如何使用 AndroidX Preference Library。自 Android 10 开始,系统已弃用 android.preference 库平台。
所以现在用:
AndroidX Preference Library
属于:
Jetpack 是一套库、工具和指南,可帮助开发者更轻松地编写优质应用。这些组件可帮助您遵循最佳做法、让您摆脱编写样板代码的工作并简化复杂任务,以便您将精力集中放在所需的代码上。
Jetpack 包含与平台 API 解除捆绑的 androidx.* 软件包库。这意味着,它可以提供向后兼容性,且比 Android 平台的更新频率更高,以此确保您始终可以获取最新且最好的 Jetpack 组件版本。
看起来初始化没啥大问题
但是之前代码中有:
onPreferenceChange
所以要去搞清楚如何实现
然后也没搜到是如何调用onPreferenceChange的
后来搜到了:
android/preference/Preference.java
protected boolean callChangeListener(Object newValue) { return mOnChangeListener == null ? true : mOnChangeListener.onPreferenceChange(this, newValue); }

是内置的库中
完整路径是:
/Users/xxx/Library/Android/sdk/sources/android-23/android/preference/Preference.java
说明是Android sdk api 23版本的
此处是
src/com/orangelabs/rcs/tts/Main.java
public class Main extends PreferenceActivity implements Preference.OnPreferenceChangeListener { public boolean onPreferenceChange(Preference preference, Object objValue) { 。。。
实现了onPreferenceChange
根据解释,好像是最新的(PreferenceActivity和)PreferenceFragmentCompat
是自动处理数据的保存的
公用的是:SharedPreferences
目前xml配置是
res/xml/tts_preferences.xml
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <CheckBoxPreference android:key="activate" android:title="@string/label_activate" android:summaryOn="@string/label_summary_activate_on" android:summaryOff="@string/label_summary_activate_off"/> </PreferenceScreen>
除了summary是summaryOn和summaryOff之外,其他看起来都符合标准,不需要改
但是改了后:
// public static class MyPreferenceFragment extends PreferenceFragment public static class MyPreferenceFragment extends PreferenceFragmentCompat { @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.tts_preferences); } }
会报错:

难道是 顶级类没扩展自Activity?
试试:
//public class Main extends PreferenceActivity implements Preference.OnPreferenceChangeListener { public class Main extends Activity{
问题依旧:

难道是缺少类的导入?
看到之前很多都是:
v7左右的
的
<android.support.v7.preference.SwitchPreferenceCompat
的
compile 'com.android.support:preference-v7:26.+'
然后去尝试看到的新的androidX:
【未解决】Android中导入androidX去实现PreferenceFragmentCompat的rcsjta的tts的设置
总体上感觉:
还是不去引入androidX吧,否则兼容性问题太多,无法全部解决的感觉。
还是去掉AndroidX,用之前的版本
然后遇到:
【已解决】Android中用preference-v7后编译报错:values-v26.xml AAPT error resource android attr colorError not found
此处,又遇到了另外的问题了:
【未解决】Android项目rcsjta的子项目api_cnx编译报错:android.app中的ProgressDialog已过时
转载请注明:在路上 » 【未解决】Android Studio中用PreferenceFragmentCompat实现rcsjta的tts的参数设置页面