从androidx源文件开始,我已经使用以下过程将基于旧DialogPreference的自定义类迁移到新的androidx.preference.DialogPreference:
第1步
基于旧版DialogPreference的旧自定义对话框类(例如CustomDialogPreference)应拆分为两个单独的类:
>一个类(例如CustomPreference)应该扩展androidx.preference.DialogPreference,并且只包含与首选项处理(数据管理)相关的代码.
>另一个类(例如CustomDialog)应该扩展androidx.preference.PreferenceDialogFragmentCompat,并且只包含与对话框处理(用户界面)相关的代码,包括onDialogClosed.此类应公开静态方法newInstance以返回此类的实例.
第2步
在基于PreferenceFragmentCompat的主片段处理首选项中,应重写onDisplayPreferenceDialog方法以显示自定义对话框,例如:
private static final String DIALOG_FRAGMENT_TAG = "CustomPreference";
@Override
public void onDisplayPreferenceDialog(Preference preference) {
if (getFragmentManager().findFragmentByTag(DIALOG_FRAGMENT_TAG) != null) {
return;
}
if (preference instanceof CustomPreference) {
final DialogFragment f = CustomDialog.newInstance(preference.getKey());
f.setTargetFragment(this, 0);
f.show(getFragmentManager(), DIALOG_FRAGMENT_TAG);
} else {
super.onDisplayPreferenceDialog(preference);
}
}