Проблема с отображением ProgressDialog в Nested Tab Activity - PullRequest
3 голосов
/ 02 февраля 2011

У меня есть активность вложенных вкладок.

TabMain (TabHost) с этим у меня есть ChildTab (еще один TabHost) и другие 2 действия.

Я могу показать диалог прогресса в этом другом2 действия.

Но с помощью в ChildTab TabActivity я добавляю 5 действий

, чтобы можно было отображать progressDialog.

Я получаю следующую ошибку.

ОШИБКА / AndroidRuntime (339): вызвано: android.view.WindowManager $ BadTokenException: невозможно добавить окно - маркер android.app.LocalActivityManager$LocalActivityRecord@43d304f0 недопустим;ваша деятельность работает?

Ответы [ 4 ]

8 голосов
/ 02 февраля 2011

Попробуйте ProgressDialog progressDialog = ProgressDialog.show(getParent(), "Loading...", "Please wait...");

... Я думаю, что это заставит задуматься.

2 голосов
/ 19 ноября 2011

Уродливое решение:

        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            parent = (ConfigurarionStyleAndroidGUI) getParent();            
            addPreferencesFromResource(R.xml.ui_settings);
            EditTextPreference p = (EditTextPreference) getPreferenceManager().findPreference(getString(R.string.key_settings_style_name));
            forceContext(parent,p);
        }
        private void forceContext(Context context,Preference p){
        try {
            Field field = Preference.class.getDeclaredField("mContext");
            field.setAccessible(true);
            field.set(p, parent);
        } catch (Exception e) {
            e.printStackTrace();
        }           
    }
2 голосов
/ 11 сентября 2011

Хорошо.Я тоже нашел эту ошибку и разозлился, пока не нашел решение.Ответ выше верен, но в моем случае у меня было вложенное приложение, образованное вкладками / группами действий в / больше групп действий и одним действием внутри.Вам нужно пройти столько уровней, сколько вам нужно, пока вы не получите контекст приложения.В моем случае их было два:

public static Activity goUp(Activity current){
        if(current.getParent()!=null){
            current=current.getParent();
            goUp(current);
        }
        return current;
    }
    ProgressDialog progressDialog = ProgressDialog.show(goUp(MyActivity.this), "Loading...", "Please wait...");
1 голос
/ 09 апреля 2012

Если getParent () не работает для вас, попробуйте использовать просто TabsActivity.context (или подставьте имя класса активности вашей родительской вкладки).Я использую вложенные действия, и в результате использование getParent () все еще не возвращает правильный контекст для диалога.

После попытки 20 различных вариантов предложенных выше предложений я заменил эту строку:

AlertDialog.Builder builder = new AlertDialog.Builder(this); 

С:

AlertDialog.Builder builder = new AlertDialog.Builder(TabsActivity.context); 

, и это сработало как шарм.Вам также необходимо создать контекстную переменную в классе TabsActivity.Что-то вроде public static TabsActivity context; и context=this в методе onCreate.

...