最新消息:20210917 已从crifan.com换到crifan.org

【未解决】Android Studio中用PreferenceFragmentCompat实现rcsjta的tts的参数设置页面

Android crifan 556浏览 0评论
折腾:
【未解决】rcsjta项目编译出错:警告deprecation PreferenceActivity中的getPreferenceScreen()已过时
期间,突然想到:
去找找 这几个类的演化历史
android PreferenceActivity PreferenceFragment PreferenceFragmentCompat
Android开发设置页面 – 知乎
项目中经常需要用到设置(Setting),在安卓中主要使用
  • android.preference.PreferenceFragment
    • 在Android API 28中PreferenceFragment已经过时
      • 推荐使用PreferenceFragmentCompat
  • android.support.v7.preference.PreferenceFragmentCompat
所以现在问题转换为:
如何用PreferenceFragmentCompat去实现tts的配置界面
设置  |  Android 开发者  |  Android Developers
有参考代码实现
android  PreferenceFragmentCompat
PreferenceFragmentCompat  |  Android 开发者  |  Android Developers
PreferenceFragmentCompat – 简书
Android开发之UI开发之V7库使用之PreferenceFragmentCompat组件使用及踩坑_清心寡欲,唯淡是真!-CSDN博客_preferencefragmentcompat
android设置页面PreferenceFragmentCompat | 大专栏
设置  |  Android 开发者  |  Android Developers
注意:本指南介绍如何使用 AndroidX Preference Library。自 Android 10 开始,系统已弃用 android.preference 库平台。
所以现在用:
AndroidX Preference Library
属于:
Android Jetpack
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
Using PreferenceFragment to store user preferences –
根据解释,好像是最新的(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左右的
https://www.dazhuanlan.com/2019/09/23/5d88b152c0732/
<android.support.v7.preference.SwitchPreferenceCompat
https://blog.csdn.net/qq_26914291/article/details/79917097
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的参数设置页面

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
93 queries in 0.180 seconds, using 23.38MB memory