Android не удается добавить окно - PullRequest
1 голос
/ 02 июня 2011

У меня есть PreferenceActivity, содержащее, среди прочего, флажки, и оно отлично работает. Я решил добавить AlertDialog, который сначала предлагает пользователю убедиться, что он хочет установить флажок. В девяти случаях из 10 все работает нормально, но в некоторых случаях, когда я пытаюсь установить флажок сразу после загрузки ActivityPreference, при попытке показать диалоговое окно появляется следующая ошибка:

android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@45a646d8 is not valid; is your activity running?
at android.view.ViewRoot.setView(ViewRoot.java:468)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
at android.view.Window$LocalWindowManager.addView(Window.java:424)
at android.app.Dialog.show(Dialog.java:239)
at android.app.AlertDialog$Builder.show(AlertDialog.java:802)
at com.beargraves.hitechmedia.AppPreferenceActivity.onSharedPreferenceChanged(AppPreferenceActivity.java:385)
at android.app.ApplicationContext$SharedPreferencesImpl$EditorImpl.commit(ApplicationContext.java:2861)
at android.preference.Preference.tryCommit(Preference.java:1199)
at android.preference.Preference.persistBoolean(Preference.java:1404)
at android.preference.CheckBoxPreference.setChecked(CheckBoxPreference.java:154)
at android.preference.CheckBoxPreference.onClick(CheckBoxPreference.java:143)
at android.preference.Preference.performClick(Preference.java:811)
at android.preference.PreferenceScreen.onItemClick(PreferenceScreen.java:190)
at android.widget.AdapterView.performItemClick(AdapterView.java:284)
at android.widget.ListView.performItemClick(ListView.java:3606)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:1751)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4363)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:862)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
at dalvik.system.NativeStart.main(Native Method)

Я видел этот вопрос , но ответы не были актуальны. Вот мой код

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key) {
    final String k = key;
    if (findPreference(key) instanceof CheckBoxPreference) {
        final CheckBoxPreference chkPref = (CheckBoxPreference) findPreference(key);

        boolean result = sharedPreferences.getBoolean(key,false);
            if(result){

                new AlertDialog.Builder(AppPreferenceActivity.this)

                .setTitle("Confirm Ation")

                .setMessage("Do you wish to: " + chkPref.getTitle())

                .setPositiveButton("Yes",new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        pDialog.setMessage("Syncing");
                        pDialog.show();
                        new SyncTask().execute(k);

                    }
                })

                .setNegativeButton("No",

                        new DialogInterface.OnClickListener() {

                    public void onClick(DialogInterface dialog, int which) {

                        chkPref.setChecked(false);

                    }

                }).show();

            }

    }

}

Любая помощь будет высоко ценится.

...