【问题标题】:Progress dialog on View pager查看寻呼机上的进度对话框
【发布时间】:2012-08-28 10:38:07
【问题描述】:

我正在使用 View Pager 在活动中显示 3 个片段(Dashboard.java)。单击上一个活动(Login.java)上的按钮后加载活动,其中两个片段显示从服务器获取的列表视图。

问题是从服务器获取数据并填充为列表视图至少需要 3-7 秒。所以我想显示一个 ProgressDialog 来显示一个 Loading 状态。

我尝试过 AsyncTask 从片段中的服务器加载数据。它有效,但仅在几次后才显示 ProgressDialog,仅在填充列表之前一秒钟。单击 BUTTON 加载主 Activity (Dashboard.java) 也有延迟

所以有两个问题: 1. 进度对话框出现得很晚 2.上一个activity(Login.java)到MainActivity(Dashboard.java)有延迟(有时会黑屏)

这是我在 Fragment 中的 AsyncTask

new AsyncTask<Void, Void, Void>() {

            @Override
            protected void onPostExecute(Void result) {

                    pd.dismiss();
                super.onPostExecute(result);
            }

            @Override
            protected void onPreExecute() {
                pd.show();
                super.onPreExecute();
            }

            @Override
            protected Void doInBackground(Void... params) {


                NodeList nl = doc.getElementsByTagName(KEY_ITEM);
                // looping through all item nodes <item>
                for (int i = 0; i < nl.getLength(); i++) {
                    // creating new HashMap
                    HashMap<String, String> map = new HashMap<String, String>();
                    Element e = (Element) nl.item(i);
                    // adding each child node to HashMap key => value
                    map.put(KEY_ID, parser.getValue(e, KEY_ID)); // id not using any
                                                                    // where
                    map.put(KEY_NAME, parser.getValue(e, KEY_NAME));

                    // adding HashList to ArrayList
                    menuItems.add(map);
                }

                                return null;
            }
        }.execute();

实际上我应该在 MainActivity (Dashboard.java) 还是 Fragment.java 上使用 ProgressDialog? 请指引我正确的道路。

编辑 实际上,使用进度对话框加载片段的最佳方式是什么? (片段是从服务器填充的列表视图)

【问题讨论】:

    标签: android android-fragments android-viewpager progressdialog


    【解决方案1】:

    可能有两种解决方案..

    1. 在您从 Login.java 活动中启动 Dashboard.java 时启动 AsyncTask,并将启动活动代码放在 @987654323 的 onPostExecute() 上@。这将帮助您在有完整的 Fragments 数据时加载 Dashboard.java 活动。

    2. Dashboard.javaonCreate() 中启动 AsyncTask。并在 AsyncTask 的 onPreExecute() 中显示 ProgressDailog 并取消它 onPostExecute() 但为此您有一些 pre-design layout 用于片段,因此用户看不到 Dashboard.java 的黑屏 活动。

    【讨论】:

    • 第二种方法不起作用..fragments.add(Fragment.instantiate(this, MenuContact.class.getName())); fragments.add(Fragment.instantiate(this, MenuDash.class.getName())); fragments.add(Fragment.instantiate(this, MenuHistory.class.getName()));这些是MAIN ACTIVITY中的片段调用
    • 问题是 ProgressDialog 正在显示,但仅在加载所有片段后才显示。意味着屏幕卡住了几秒钟,并显示 PD 以及获取的数据。实际上我需要在一开始就展示PD。你能帮帮我吗?
    【解决方案2】:

    没关系,在 doInBackground() 之外写一个方法是我的错误

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-28
      相关资源
      最近更新 更多