I have used a custom ListPreference which worked well before. Then upgrading to Androidx, it appears this error:
import androidx.preference.ListPreference;
....
public static class myPreferenceFragment extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener {
...
ListPreference coustomListPreference = (ListPreference) findPreference("list_XXXX");
coustomListPreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
...
if(!XXXXPermissionGranted(): when users don't grant some Permission, causing this ListPreference to have nothing to show)
coustomListPreference.getDialog().dismiss();
}
> Cannot resolve method 'getDialog' in 'ListPreference'
I've searched this topic and I cannot find a straight answer.
For Androidx, it needs to do these things in addition to your PreferenceFragmentCompat to accomplish the coustomListPreference.getDialog().dismiss() in the question statements.
This could be a template if you want to make the dialog dismiss or to customize the Entries/Values of the ListPreference.
public static class myDialogPrefFragCompat extends PreferenceDialogFragmentCompat {
public static myDialogPrefFragCompat newInstance(String key) {
final myDialogPrefFragCompat fragment = new myDialogPrefFragCompat();
final Bundle bundle = new Bundle(1);
bundle.putString(ARG_KEY, key);
fragment.setArguments(bundle);
return fragment;
}
@Override
public void onDialogClosed(boolean positiveResult) {
if (positiveResult) {
// do things
}
}
}
public static class myPreferenceFragment extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener {
...
private static final String DIALOG_FRAGMENT_TAG = "myDialogPreference";
@Override
public void onDisplayPreferenceDialog(Preference preference) {
if (getParentFragmentManager().findFragmentByTag(DIALOG_FRAGMENT_TAG) != null) {
return;
}
if (preference instanceof ListPreference) {
if (preference.getKey().equals("list_XXXX")){
initXXXXPermissionToGo(); //Request Android Permission such like Contacts etc. for customizing the Entries/Values of the ListPreference
if(XXXXPermissionGranted())
super.onDisplayPreferenceDialog(preference);
/*else
super.onDisplayPreferenceDialog(preference);
when the Permission not granted, nothing can be set in ListPreference Entries/Values, and there's no need to see it. This equals
coustomListPreference.getDialog().dismiss() in the question*/
}else
super.onDisplayPreferenceDialog(preference);
} else {
super.onDisplayPreferenceDialog(preference);
}
}
...