有关PreferenceActivity的Android弃用方法警告

jil*_*ggs 11 android deprecated preferenceactivity android-preferences sharedpreferences

当我尝试使用Android的开发人员指南和教程使用"首选项"创建"设置活动"时,我收到警告,例如:

"不推荐使用PreferenceActivity类型的方法addPreferencesFromResource(int)"

对于代码中的这两行:

getPreferenceManager().setSharedPreferencesName(PREFS_NAME);
addPreferencesFromResource(R.xml.default_values);
Run Code Online (Sandbox Code Playgroud)

我知道这些只是警告,但是当我运行我正在设计的应用程序时,我想知道它们现在还是将来是否会引起任何问题.

public class DefaultValues extends PreferenceActivity {

    static final String PREFS_NAME = "defaults";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        getPrefs(this);
        getPreferenceManager().setSharedPreferencesName(PREFS_NAME);
        addPreferencesFromResource(R.xml.default_values);
    }

    static SharedPreferences getPrefs(Context context) {
        PreferenceManager.setDefaultValues(context, PREFS_NAME, MODE_PRIVATE,
                R.xml.default_values, false);
        return context.getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
    }
}
Run Code Online (Sandbox Code Playgroud)

Cri*_*tan 22

PreferenceActivity()已弃用,但PreferenceFragment()现在也是如此.PreferenceFragmentCompat()现在是要走的路:

添加依赖项

implementation "androidx.preference:preference:1.0.0-alpha3"
Run Code Online (Sandbox Code Playgroud)

或者,如果您仍在使用支持库:

implementation "com.android.support:preference-v7:27.1.1"
Run Code Online (Sandbox Code Playgroud)

扩展PreferenceFragmentCompat

class MyPreferenceFragment : PreferenceFragmentCompat() {
    override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
        addPreferencesFromResource(R.xml.app_preferences)
    }
}
Run Code Online (Sandbox Code Playgroud)

展示你的碎片

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    supportFragmentManager.beginTransaction().replace(android.R.id.content, MyPreferenceFragment()).commit()
}
Run Code Online (Sandbox Code Playgroud)

指定preferenceTheme

在AppTheme中,添加以下任一首选项主题,具体取决于您认为哪一个更好:

<item name="preferenceTheme">@style/PreferenceThemeOverlay</item>
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
Run Code Online (Sandbox Code Playgroud)


Rag*_*ood 7

由于该方法已弃用,建议您不要在代码中使用它,因为完全有可能在未来的Android版本中将其删除.但是,我还没有遇到一个已被弃用的方法,该方法实际上已从Android中删除.

方法的描述中没有提供替代方法,因为首选方法(从API级别11开始)是实例化PreferenceFragment对象以从资源文件加载首选项.请在此处查看示例代码:PreferenceActivity