3

OnPreferenceClickListener创建了一个新的AlertDialog,如下所示。当我运行程序时,我得到了期望

android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application

我的代码有什么问题?

public static class PrefsFragment extends PreferenceFragment {
    Preference pref= findPreference("text_preference1");
    pref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
        @Override
        public boolean onPreferenceClick(Preference preference) {
            new AlertDialog.Builder(mContext).setTitle(R.string.alert_dialog_title)
                    .setMessage(R.string.alert_dialog_message)
                    .setPositiveButton(R.string.alert_dialog_ok,
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                        }
                    })
                    .setNegativeButton(R.string.alert_dialog_nein, null).show();

                    //do s.th.
        return false;
        }
    });
}
4

1 回答 1

3

我认为你得到了ApplicationContext. 但它不应该用于创建对话框。

而不是mContextinnew AlertDialog.Builder(mContext)你应该使用getActivity(),它返回与片段关联的活动。

由于您使用的是片段,因此只需调用 FragmentsgetActivity()方法即可获取 Activity 的上下文。

于 2012-10-16T19:02:25.763 回答