0

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

回答

0

由於您僅面臨的錯誤爲getFragmentManager()

嘗試將代碼從getFragmentManager()更改爲 getSupportFragmentManager()

希望這會有所幫助。

0

你在混合支持和不支持類。當你輸入一個類IDE建議您導入兩個類具有相同的名稱之一:

enter image description here

正如你已經使用PreferenceFragmentCompat(這是從支持庫類),你應該使用支持片段相關的類:

import android.support.v4.app.DialogFragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v7.preference.Preference; 
import android.support.v7.preference.PreferenceFragmentCompat; 

public class PreferenceFragment extends PreferenceFragmentCompat implements Preference.OnPreferenceChangeListener { 

    @Override public boolean onPreferenceChange(Preference preference, Object o) { 
     FragmentManager fragmentManager = getFragmentManager(); 
     DialogFragment PasswordDialogFragment = get(); 
     PasswordDialogFragment.show(fragmentManager, "Password"); 
     return true; 
    } 
}