我正在爲我的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未初始化。