【发布时间】:2017-10-08 22:22:23
【问题描述】:
我正在为我的 android 应用程序创建一个设置活动,它是允许密码与否的选项之一,我不只是希望无论如何检查该选项,所以我希望它在更改首选项之前询问密码。我希望在首选项更改之前弹出一个对话框片段并询问密码,更改后,应调用 onPreferenceChange 方法,如果密码正确,则可以通过返回 true 更改首选项;
问题是我的设置片段无法识别 getFragmentManager(),即使我这样做 getActivity.getFragmentManager 它也会给出一个错误,即 preferencefragment无法投射到对话框中。该对话框适用于项目中的正常活动,但不适用于首选项片段。
这是显示活动将被投射到哪里的对话框片段
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 没有被初始化。
【问题讨论】:
标签: android android-preferences preferenceactivity preferencefragment