Fix InstantiationException on fragment
Since we overrided the empty constructor, it can't find a empty constructor when Fragment tries to instantiate a fragment in framework. So, we can't override this constructor, and then just use newInstance() to initialize and setup a new Fragment. Test: robotest Change-Id: Ifcd1c1771bc69d947caeee5c5bc055c4f94365c2 Fixes: 115676209
This commit is contained in:
@@ -454,7 +454,7 @@ public abstract class SettingsPreferenceFragment extends InstrumentedPreferenceF
|
||||
if (mDialogFragment != null) {
|
||||
Log.e(TAG, "Old dialog fragment not null!");
|
||||
}
|
||||
mDialogFragment = new SettingsDialogFragment(this, dialogId);
|
||||
mDialogFragment = SettingsDialogFragment.newInstance(this, dialogId);
|
||||
mDialogFragment.show(getChildFragmentManager(), Integer.toString(dialogId));
|
||||
}
|
||||
|
||||
@@ -541,22 +541,26 @@ public abstract class SettingsPreferenceFragment extends InstrumentedPreferenceF
|
||||
private DialogInterface.OnCancelListener mOnCancelListener;
|
||||
private DialogInterface.OnDismissListener mOnDismissListener;
|
||||
|
||||
public SettingsDialogFragment(DialogCreatable fragment, int dialogId) {
|
||||
super(fragment, dialogId);
|
||||
public static SettingsDialogFragment newInstance(DialogCreatable fragment, int dialogId) {
|
||||
if (!(fragment instanceof Fragment)) {
|
||||
throw new IllegalArgumentException("fragment argument must be an instance of "
|
||||
+ Fragment.class.getName());
|
||||
}
|
||||
mParentFragment = (Fragment) fragment;
|
||||
}
|
||||
|
||||
final SettingsDialogFragment settingsDialogFragment = new SettingsDialogFragment();
|
||||
settingsDialogFragment.setParentFragment(fragment);
|
||||
settingsDialogFragment.setDialogId(dialogId);
|
||||
|
||||
return settingsDialogFragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMetricsCategory() {
|
||||
if (mDialogCreatable == null) {
|
||||
if (mParentFragment == null) {
|
||||
return Instrumentable.METRICS_CATEGORY_UNKNOWN;
|
||||
}
|
||||
final int metricsCategory = mDialogCreatable.getDialogMetricsCategory(mDialogId);
|
||||
final int metricsCategory =
|
||||
((DialogCreatable) mParentFragment).getDialogMetricsCategory(mDialogId);
|
||||
if (metricsCategory <= 0) {
|
||||
throw new IllegalStateException("Dialog must provide a metrics category");
|
||||
}
|
||||
@@ -639,6 +643,14 @@ public abstract class SettingsPreferenceFragment extends InstrumentedPreferenceF
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void setParentFragment(DialogCreatable fragment) {
|
||||
mParentFragment = (Fragment) fragment;
|
||||
}
|
||||
|
||||
private void setDialogId(int dialogId) {
|
||||
mDialogId = dialogId;
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean hasNextButton() {
|
||||
|
Reference in New Issue
Block a user