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; 
    } 
}