我正在为我的android应用程序创建一个设置活动,它允许输入密码或不输入密码的选项之一,我不仅希望该选项能够被检查,所以我希望它在更改密码之前询问密码偏爱。我希望弹出一个对话框片段并在首选项更改之前询问密码,更改之后,应调用方法并且如果密码正确,则可以通过返回true更改首选项;首选项活动
的问题是,我的设置片段无法识别getFragmentManager(),即使我做getActivity.getFragmentManager它给出了一个错误的preferencefragment不能转换到对话框。该对话框适用于项目中的正常活动,但不适用于首选项片段。
这是表示dialogfragment其中活动是被铸造
public class password_dialog extends DialogFragment {
public interface PasswordDialogListener {
void onDialogPositiveClick(DialogFragment dialog, String password);
void onDialogNegativeClick(DialogFragment dialog);
}
PasswordDialogListener mListener;
@Override
public void onAttach(Context activity) {
super.onAttach(activity);
// Verify that the host activity implements the callback interface
try {
// Instantiate the PasswordDialogListener so we can send events to the host
mListener = (PasswordDialogListener) activity;
} catch (Exception e) {
Log.e("dialog",e.getMessage());
}
}
。 。 。
这是偏好的主代码段的类扩展扩展PreferenceFragmentCompat和实现Preference.OnPreferenceChangeListener,password_dialog.PasswordDialogListener
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.preferences);
Preference preference = findPreference(getString(R.string.printSetting));
/*****Realm*****/
Realm.init(getActivity());
realm = Realm.getDefaultInstance();
preference.setOnPreferenceChangeListener(this);
}
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
DialogFragment PasswordDialogFragment = new password_dialog();
PasswordDialogFragment.show(getFragmentManager(), "Password");
if (passwordIsCorrect) {
return true;
} else {
return false;
}
}
,因为它给出了一个空指针异常,因为而mListener未初始化。