setTargetFragment is depricated PreferenceDialogFragmentCompat

Viewed 217

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?

0 Answers
Related