I am trying to open a PreferenceDialogFragmentCompat from my PreferenceFragmentCompat by doing this:
@Override
public void onDisplayPreferenceDialog(Preference preference) {
// check if dialog is already showing
if (getParentFragmentManager().findFragmentByTag(DIALOG_FRAGMENT_TAG) != null) {
return;
}
final DialogFragment f;
if (preference instanceof NumberPickerPreference) {
f = NumberPickerPreferenceDialogFragment.newInstance(preference.getKey());
} else if (preference instanceof TextAutoCompletePreference) {
f = TextAutoCompletePreferenceDialogFragment.newInstance(preference.getKey());
} else
f = null;
if (f != null) {
f.setTargetFragment(this, 0); // This is depricated
f.show(getFragmentManager(), DIALOG_FRAGMENT_TAG);
} else {
super.onDisplayPreferenceDialog(preference);
}
}
But apparently setTargetFragment is depricated.
I tried to replace it with this:
getParentFragmentManager().beginTransaction().replace(R.id.settings_container, f).addToBackStack(null).commit();
getParentFragmentManager().setFragmentResultListener("requestKey", this, new FragmentResultListener() {
@Override
public void onFragmentResult(@NonNull String s, @NonNull Bundle bundle) {
}
});
but this is crashing the app with
Target fragment must implement TargetFragment interface
I am guessing this is because the onCreate of PreferenceDialogFragmentCompat
//Decompiled onCreate of PreferenceDialogFragmentCompat
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Fragment rawFragment = this.getTargetFragment();
if (!(rawFragment instanceof TargetFragment)) {
throw new IllegalStateException("Target fragment must implement TargetFragment interface");
} else {
....
}
}
What is the correct way to use PreferenceDialogFragmentCompat?