【问题标题】:Show dialog while loading new screen加载新屏幕时显示对话框
【发布时间】:2017-08-12 19:21:56
【问题描述】:

我有一个带有打开第二个屏幕的按钮的前屏幕。第二个屏幕可能需要几秒钟才能加载,所以我想在加载时显示一个对话框。我的问题是加载第二个屏幕时对话框不显示,但是当我从第二页返回到第一页时它显示。如果我注释掉 startActivity 以打开第二页,则对话框显示正常。我对 android 编程相当陌生 - 我想这与线程有关。

//code snippet from inside onCreate:
NewGame.setOnClickListener(new View.OnClickListener() {
         public void onClick(View arg0) {
//does not get displayed before 2nd page opens 
          showDialog(DIALOG2_KEY); 
//shows fine if next 2 lines commented out
             Intent i = new Intent(screen1.this, SudukuXL.class);
            startActivity(i);

我已经使用onPause() 处理了返回前屏幕时显示的对话框。我尝试使用线程将对话框与startActivity 分开,但我没有运气。任何帮助将不胜感激。

我使用 Android 示例中的代码来创建对话框。我包括以下供参考:

protected Dialog onCreateDialog(int id) {
   switch (id) {

       case DIALOG2_KEY: {
           ProgressDialog dialog = new ProgressDialog(this);
           dialog.setMessage("Loading...");
           dialog.setIndeterminate(true);
           dialog.setCancelable(true);
           return dialog;
       }
   }
   return null;
}

【问题讨论】:

    标签: android dialog


    【解决方案1】:

    恕我直言,我宁愿使用ViewSwitcher 而不是对话。 但无论如何我认为你应该在“第二个屏幕”中显示对话框(或切换视图)。只需让您的“第二个”活动开始,然后在处理一些内容时在onCreate() 中显示对话框,并在完成后删除对话框(或切换视图)。 我的建议是使用AsyncTask 或like this 在后台做一些事情!!! 还有this topic可以帮到你

    【讨论】:

    • 我已经测试了延迟发生的地方。它实际上是在构建 XML - 一个表中有 81 个 editText。在我的 PC 上的模拟器中 - 使用空白的 java 类但相同的 xml 需要 2 秒才能显示。添加完整的 java 类后,大约需要 3 秒。构建 XML 时是否可以在第二个屏幕上显示对话框或 ViewSitcher? - 我会去的。
    • 所以问题出在模拟器渲染视图的时间上?我对吗?我不知道您要开发什么,但我宁愿使用像 Adapter 这样的东西,它有很多元素的巨大视图。 Adapters 和 AdapterView 的优点是您可以只渲染视图和数据的可见部分。检查文档。 developer.android.com/reference/android/widget/Adapter.html
    • 感谢您的建议 - 我正在做一个数独游戏,所以有 81 个单独的编辑文本。我是否应该放弃在不同线程中拆分 setContentView 和 showDialog 的尝试(见下文)?
    • 我尝试将 GridView 作为 AdapterView,但是当我在其中添加 editTexts 时出现错误:“AdapterView 不支持 addView(View,LayoutParams)”如果这是不可能的 - 我想尝试您的原始建议 - 在构建 setContent /XML 时在第二个屏幕中加载一个对话框。您知道如何在构建原始 XML 时显示对话框 - 如下所示。
    • 实际上我不知道如何在调用 setContentView() 后 android 渲染您的 xml 时显示对话框。但我有一些建议:不建议在布局中拥有超过 80 个视图的 AFAIK,如果您尝试使用特殊工具“layoutopt”,它会警告您!(developer.android.com/guide/developing/tools/layoutopt.html)所以我坚持使用适配器和适配器视图,但是您应该编写自己的适配器实现,并且适配器视图尝试扩展标准之一(GridView ...)。以后我会尝试写一个简单的例子。
    【解决方案2】:

    我尝试显示一个对话框,直到 xml 被填满,但还没有完全正确。这是我尝试的一种方法:

    public void onCreate(Bundle icicle)
               {
                 super.onCreate(icicle);
                 showDialog(DIALOG2_KEY);
    
                 new Thread(new Runnable(){
                        public void run(){
                             setContentView(R.layout.saved); 
                       }
                  }).start();
                   //   removeDialog(DIALOG2_KEY);
    

    我尝试了其他一些方法,包括交换线程内部的内容和执行顺序等。没有一种方法有效。上面的代码快速显示对话框(非常好)但随后崩溃。

    【讨论】:

      猜你喜欢
      • 2021-03-30
      • 1970-01-01
      • 1970-01-01
      • 2011-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多