2

アクティビティ (Dashboard.java) で 3 つのフラグメントを表示するために View Pager を使用しています。前のアクティビティ (Login.java) のボタンをクリックした後にアクティビティが読み込まれ、2 つのフラグメントがサーバーからフェッチされたリストビューを表示しています。

問題は、サーバーからデータを取得してリストビューとして表示するのに少なくとも 3 ~ 7 秒かかることです。だから私は ProgressDialog を表示して Loading ステータスを表示したいと思います。

AsyncTask を試して、サーバーからデータをフラグメントにロードしました。それは機能しますが、ProgressDialog は数時間後、リストにデータが入力される前の 1 秒間だけ表示されます。また、ボタンをクリックしてメイン アクティビティ (Dashboard.java) をロードする際にも遅延が発生します。

したがって、2 つの問題があります 。 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 を使用する必要がありますか? 私を正しい道へと導いてください。

編集 実際には、進行状況ダイアログでフラグメントをロードする最良の方法は何ですか? (フラグメントは、サーバーから入力されたリストビューです)

4

2 に答える 2

1

そのための2つの解決策があるかもしれません..

  1. Login.javaアクティビティからDashboard.javaを開始AsyncTaskした時点で開始し、開始アクティビティ コードをof に配置します。これは、フラグメントの完全なデータがある場合に、 Dashboard.javaアクティビティをロードするのに役立ちます。onPostExecute()AsyncTask

  2. Dashboard.javaのAsyncTask を開始しonCreate()ます。そして、AsyncTaskでProgressDailogを表示してキャンセルしますが、これにはフラグメント用のものがいくつかあるため、ユーザーはDashboard.javaアクティビティの黒い画面を見ることができません。onPreExecute()onPostExecute()pre-design layout

于 2012-08-28T10:49:53.753 に答える
0

doInBackground() の外にメソッドを書いたのは私の間違いでした。

于 2012-11-11T15:55:56.433 に答える