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
DialogPreferencedoesn't haveonCreateDialogView. - v7
DialogPreferencedoesn't haveonDialogClosed.
I was wondering, what is the proper way, to achieve similar functionality of onCreateDialogView and onDialogClosed in v7 DialogPreference?