3

我有嵌套选项卡活动。

TabMain(TabHost)与我有 ChildTab(另一个 TabHost)和其他 2 个活动。

我可以在其他 2 个活动中显示进度对话框。

但是在 ChildTab TabActivity 中,我添加了 5 个活动

因为我可以显示progressDialog。

我收到以下错误。

错误/AndroidRuntime(339):原因:android.view.WindowManager$BadTokenException:无法添加窗口——令牌android.app.LocalActivityManager$LocalActivityRecord@43d304f0 无效;您的活动正在运行吗?

4

4 回答 4

8

尝试 ProgressDialog progressDialog = ProgressDialog.show(getParent(), "Loading...", "Please wait...");

...我认为这会让事情变得糟糕。

于 2011-02-02T17:01:48.870 回答
2

好的。我也发现了这个错误并变得很生气,直到我找到了解决方案。上面的答案是正确的,但在我的情况下,我有一个嵌套应用程序,由/更多活动组中的选项卡/活动组和内部单个活动组成。在获得应用程序的上下文之前,您需要根据需要升级尽可能多的级别。就我而言,有两个:

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...");
于 2011-09-10T21:30:18.970 回答
2

丑陋的解决方案:

        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();
        }           
    }
于 2011-11-19T04:47:55.530 回答
1

如果 getParent() 对您不起作用,请尝试仅使用TabsActivity.context(或替换您的父选项卡活动类的名称)。我正在使用嵌套活动,因此使用 getParent() 仍然没有为对话框返回正确的上下文。

在尝试了上述建议的 20 种不同变体后,我替换了这一行:

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

和:

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

它就像一个魅力。您还需要在 TabsActivity 类中创建上下文变量。类似于onCreate 方法中的public static TabsActivity context;东西。context=this

于 2012-04-09T05:19:55.567 回答