【问题标题】:Problem Showing ProgressDialog within Nested Tab Activity在嵌套选项卡活动中显示 ProgressDialog 的问题
【发布时间】:2011-02-02 16:37:43
【问题描述】:

我有嵌套的选项卡活动。

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

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

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

因为我可以显示进度对话框。

我收到以下错误。

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

【问题讨论】:

  • 你想如何显示对话框?
  • ProgressDialog progressDialog = ProgressDialog.show(T11.this, "加载中...", "请稍候...");这样..

标签: android android-tabhost progressdialog


【解决方案1】:

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

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

【讨论】:

  • Ya getParent() 工作得很好,伙计...谢谢...但它显示了一段时间后,我使用线程从互联网获取数据并在 UI 中更新它,它显示黑屏前 1 或 2 秒,然后显示 progressDialog ,你知道为什么吗?
  • 不,我正在使用简单线程进行网络活动和 UI 线程
【解决方案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...");

【讨论】:

    【解决方案3】:

    丑陋的解决方案:

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

    【讨论】:

      【解决方案4】:

      如果 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 之类的东西。

      【讨论】:

        猜你喜欢
        • 2018-11-24
        • 2010-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-03
        • 1970-01-01
        • 1970-01-01
        • 2015-12-14
        相关资源
        最近更新 更多