Previously, I'm using PreferenceFragment
. Hence, to invoke a custom dialog from PreferenceFragment
, I will use DialogPreference
as following.
ScanSpeedDialogPreference.java
import android.preference.DialogPreference;
public class ScanSpeedDialogPreference extends DialogPreference {
public ScanSpeedDialogPreference(Context context, AttributeSet attrs) {
super(context, attrs);
setDialogLayoutResource(R.layout.scan_speed_dialog_preference);
}
public ScanSpeedDialogPreference(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setDialogLayoutResource(R.layout.scan_speed_dialog_preference);
}
@SuppressLint("NewApi")
@Override
protected View onCreateDialogView() {
View view = super.onCreateDialogView();
// Perform all UI fine tuning and event handler installation...
return view;
}
// http://stackoverflow.com/questions/13851554/why-custom-dialogpreference-doesnt-trigger-on-onsharedpreferencechanged-listener
@Override
protected void onDialogClosed(boolean positiveResult) {
super.onDialogClosed(positiveResult);
if (positiveResult) {
persistBoolean(!getPersistedBoolean(true));
}
}
}
Recently, I'm under migration code from PreferenceFragment
to android.support.v7.preference.PreferenceFragmentCompat
.
Hence, I can no longer use DialogPreference
.
I need a class, which is subsclass from android.support.v7.preference.Preference
I try to change my DialogPreference
, to the following
ScanSpeedDialogPreference.java
import android.support.v7.preference.DialogPreference;
public class ScanSpeedDialogPreference extends DialogPreference {
public ScanSpeedDialogPreference(Context context, AttributeSet attrs) {
super(context, attrs);
setDialogLayoutResource(R.layout.scan_speed_dialog_preference);
}
public ScanSpeedDialogPreference(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setDialogLayoutResource(R.layout.scan_speed_dialog_preference);
}
@SuppressLint("NewApi")
@Override
protected View onCreateDialogView() {
View view = super.onCreateDialogView();
// Perform all UI fine tuning and event handler installation...
return view;
}
// http://stackoverflow.com/questions/13851554/why-custom-dialogpreference-doesnt-trigger-on-onsharedpreferencechanged-listener
@Override
protected void onDialogClosed(boolean positiveResult) {
super.onDialogClosed(positiveResult);
if (positiveResult) {
persistBoolean(!getPersistedBoolean(true));
}
}
}
However, 2 problems arise.
- v7
DialogPreference
doesn't haveonCreateDialogView
. - v7
DialogPreference
doesn't haveonDialogClosed
.
I was wondering, what is the proper way, to achieve similar functionality of onCreateDialogView
and onDialogClosed
in v7 DialogPreference
?