2

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

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

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

所以有两个问题: 1.进度对话框出现得很晚2.上一个活动(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?请引导我走向正确的道路。

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

4

2 回答 2

1

可能有两种解决方案..

  1. 在您从Login.javaAsyncTask活动中凝视Dashboard.java时开始,并将开始活动代码放在. 这将帮助您在片段有完整数据时加载Dashboard.java活动。onPostExecute()AsyncTask

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

于 2012-08-28T10:49:53.753 回答
0

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

于 2012-11-11T15:55:56.433 回答