View寻呼机上的进度对话框

时间:2012-08-28 10:38:07

标签: android android-fragments android-viewpager progressdialog

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

问题是从服务器获取数据至少需要3-7秒才能填充为listview。所以我想显示一个ProgressDialog来显示加载状态。

我已尝试使用AsyncTask从片段中的服务器加载数据。它可以工作,但它只在一段时间后显示ProgressDialog,只是在填充列表之前的一秒钟。此外,单击BUTTON以加载主Activity(Dashboard.java)

会有延迟

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

这是我在片段中的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? 请引导我走正确的道路。

修改 实际上,使用进度对话框加载片段的最佳方法是什么? (片段是从服务器填充的listview)

2 个答案:

答案 0 :(得分:1)

可能有两种解决方案..

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

  2. Dashboard.java AsyncTask中启动AsyncTask。并在AsyncTask的onCreate()中显示 ProgressDailog 并取消onPreExecute(),但为此您有一些onPostExecute()片段,因此用户无法看到 Dashboard.java 活动。

答案 1 :(得分:0)

没关系,在doInBackground()

旁边写一个方法是我的错